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
Libérer: 2024-12-18 17:07:10
original
755 Les gens l'ont consulté

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");
            }
        }
    }
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal