Maison > Java > javaDidacticiel > Pourquoi mes JComponents sont-ils invisibles lors de l'utilisation d'une image d'arrière-plan en Java ?

Pourquoi mes JComponents sont-ils invisibles lors de l'utilisation d'une image d'arrière-plan en Java ?

DDD
Libérer: 2024-12-21 01:21:10
original
185 Les gens l'ont consulté

Why Are My JComponents Invisible When Using a Background Image in Java?

Les JComponents ne s'affichent pas avec l'arrière-plan de l'image

Vous êtes confronté à un problème où vos JComponents sont invisibles sur une image d'arrière-plan. Cela est probablement dû à une utilisation incorrecte de JPanel et JLabel pour le rendu d'image.

Utilisation de JPanel pour le rendu d'image

Dans votre code, vous ajoutez une image à a JPanel :

mainp.add(picLabel, c);
Copier après la connexion

Bien que cela semble correct, il ne peut dessiner que l'image elle-même, pas ses composants. Pour afficher les composants tout en conservant l'image de fond, vous devez le dessiner directement sur un JPanel personnalisé comme suit :

public class CustomJPanel extends JPanel {

    private BufferedImage image;

    public CustomJPanel(BufferedImage image) {
        this.image = image;
    }

    @Override
    public Dimension getPreferredSize() {
        return (new Dimension(image.getWidth(), image.getHeight()));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);
    }
}
Copier après la connexion

Ensuite, vous pouvez ajouter vos composants à ce JPanel personnalisé :

CustomJPanel customPanel = new CustomJPanel(ImageIO.read(new File("bgd.png")));
mainp.add(customPanel);
Copier après la connexion

Utiliser JLabel pour le rendu d'image

Vous pouvez également utiliser un JLabel pour rendu des images. Cependant, assurez-vous de définir sa propriété opaque sur true pour afficher correctement les composants :

JLabel picLabel = new JLabel(new ImageIcon(ImageIO.read(new File("bgd.png"))));
picLabel.setOpaque(true);
mainp.add(picLabel);
Copier après la connexion

Assurez-vous de toujours ajouter vos composants au JPanel principal :

c.gridx = 0;
c.gridy = 1;
gusername = new JTextField();
picLabel.add(gusername, c);
Copier après la connexion

En suivant ces étapes , vous pouvez vous assurer que vos JComponents apparaissent sur une image d'arrière-plan, que ce soit en utilisant un JPanel personnalisé ou en configurant correctement un JLabel.

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal