Maison >Java >javaDidacticiel >Pourquoi mes composants Swing sont-ils cachés derrière une image d'arrière-plan et comment puis-je y remédier ?

Pourquoi mes composants Swing sont-ils cachés derrière une image d'arrière-plan et comment puis-je y remédier ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-18 17:07:10677parcourir

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

Composants non visibles avec l'image d'arrière-plan

Dans le code fourni, les composants ne sont pas visibles car l'image d'arrière-plan les superpose. Pour résoudre ce problème, un JPanel doit être ajouté pour contenir les composants et définir sa position devant l'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");
            }
        }
    }
}

Dans le code mis à jour, un JPanel nommé ComponentPanel est créé et ajouté au panneau principal. Ce panneau contient les champs de saisie et le bouton de connexion. Il est défini pour être opaque pour permettre à l'image d'arrière-plan de transparaître. La position du composantPanel est définie devant l'image en utilisant c.gridy = 1, garantissant que les composants sont visibles sur l'image d'arrière-plan.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn