JComponents werden nicht mit Bildhintergrund angezeigt
Sie stehen vor einem Problem, bei dem Ihre JComponents vor einem Hintergrundbild unsichtbar sind. Dies liegt wahrscheinlich an der falschen Verwendung von JPanel und JLabel für die Bildwiedergabe.
Verwendung von JPanel für die Bildwiedergabe
In Ihrem Code fügen Sie ein Bild hinzu ein JPanel:
mainp.add(picLabel, c);
Obwohl dies korrekt erscheint, kann es nur das Bild selbst zeichnen, nicht seine Komponenten. Um die Komponenten anzuzeigen und gleichzeitig das Hintergrundbild beizubehalten, sollten Sie es wie folgt direkt auf einem benutzerdefinierten JPanel zeichnen:
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); } }
Dann können Sie Ihre Komponenten zu diesem benutzerdefinierten JPanel hinzufügen:
CustomJPanel customPanel = new CustomJPanel(ImageIO.read(new File("bgd.png"))); mainp.add(customPanel);
JLabel für die Bildwiedergabe verwenden
Alternativ können Sie ein JLabel für die Bildwiedergabe verwenden. Stellen Sie jedoch sicher, dass Sie die opaque-Eigenschaft auf true setzen, um die Komponenten korrekt anzuzeigen:
JLabel picLabel = new JLabel(new ImageIcon(ImageIO.read(new File("bgd.png")))); picLabel.setOpaque(true); mainp.add(picLabel);
Stellen Sie sicher, dass Sie Ihre Komponenten weiterhin zum Haupt-JPanel hinzufügen:
c.gridx = 0; c.gridy = 1; gusername = new JTextField(); picLabel.add(gusername, c);
Indem Sie diese Schritte befolgen können Sie sicherstellen, dass Ihre JComponents vor einem Hintergrundbild angezeigt werden, unabhängig davon, ob Sie ein benutzerdefiniertes JPanel verwenden oder ein JLabel korrekt konfigurieren.
Das obige ist der detaillierte Inhalt vonWarum sind meine JComponents unsichtbar, wenn ich in Java ein Hintergrundbild verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!