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
DDDoriginal
2024-12-21 01:21:10187parcourir

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);

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);
    }
}

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

CustomJPanel customPanel = new CustomJPanel(ImageIO.read(new File("bgd.png")));
mainp.add(customPanel);

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);

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

c.gridx = 0;
c.gridy = 1;
gusername = new JTextField();
picLabel.add(gusername, c);

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!

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