Home > Java > javaTutorial > Why are my Swing components hidden behind a background image, and how can I fix it?

Why are my Swing components hidden behind a background image, and how can I fix it?

Mary-Kate Olsen
Release: 2024-12-18 17:07:10
Original
676 people have browsed it

Why are my Swing components hidden behind a background image, and how can I fix it?

Components Not Visible with Background Image

In the provided code, the components are not visible because the background image is overlaying them. To fix this, a JPanel should be added to contain the components and set its position in front of the image.

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Login implements ActionListener {
    JTextField gusername;
    JTextField gpassword;
    static String username;
    static String password;

    void logini() throws IOException {
        JFrame window = new JFrame("Login");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(300, 250);
        window.setResizable(false);
        window.setVisible(true);

        JPanel mainp = new JPanel(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        window.add(mainp);

        BufferedImage myPicture = ImageIO.read(new File("c:\bgd.png"));
        JLabel picLabel = new JLabel(new ImageIcon(myPicture));
        picLabel.setPreferredSize(new Dimension(300, 250));
        mainp.add(picLabel, c);

        JPanel componentPanel = new JPanel();
        componentPanel.setOpaque(false);
        c.gridx = 0;
        c.gridy = 1;
        mainp.add(componentPanel, c);

        c.gridx = 0;
        c.gridy = 1;
        gusername = new JTextField();
        gusername.setText("Username");
        componentPanel.add(gusername);

        c.gridx = 0;
        c.gridy = 2;
        gpassword = new JTextField();
        gpassword.setText("password ");
        componentPanel.add(gpassword);

        c.gridx = 0;
        c.gridy = 3;
        JButton login = new JButton("Login");
        componentPanel.add(login);

        login.addActionListener(this);
        login.setActionCommand("ok");
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equalsIgnoreCase("ok")) {
            try {
                this.username = (gusername.getText());
                this.password = (gpassword.getText());
                System.out.println("0");
            } catch (NumberFormatException ex) {
                System.out.println("ERROR: Could not preform function: 7424");
            }
        }
    }
}
Copy after login

In the updated code, a JPanel named componentPanel is created and added to the main panel. This panel contains the input fields and login button. It is set to be opaque to allow the background image to show through. The position of the componentPanel is set in front of the image using c.gridy = 1, ensuring that the components are visible over the background image.

The above is the detailed content of Why are my Swing components hidden behind a background image, and how can I fix it?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template