Ich bin neu in Java GUI-Programmierung. Ich habe eine JFrame
erstellt. In diesem JFrame
habe ich eine JPanel
erstellt. Innerhalb dieser JPanel
habe ich eine andere JPanel
erstellt (nennen wir es "A").Ich kann unter JPanel in JPanel in JFrame nicht sehen
Ich habe in "A" ein Rechteck gezeichnet und wollte Schaltflächen mit Grafiken erstellen. Es gibt kein Rechteck in meiner GUI. Ich konnte sehen, dass die paintComponent()
Methode in "A" nicht aufgerufen wird.
Code: Die JPanels: (das Kind JPanel
ist innere Klasse)
public class MemoryPanel extends JPanel {
public MemoryPanel(){
setPreferredSize(new Dimension(350,448));
}
@Override
public void paintComponent(Graphics g) {
//POSITIONING
setLayout(new BorderLayout());
//CREATE MEMORY BUTTONS
MemButton a=new MemButton();
//Drawing Rectangles for Memory
add(a,BorderLayout.CENTER);
}
private class MemoryButton extends JPanel{
public MemoryButton(){
setLayout(null);
setPreferredSize(new Dimension(87,40));
}
@Override
public void paintComponent(Graphics g){
Graphics2D td= (Graphics2D)g;
td.drawRect(0, 0, 20, 20);
}
}
}
EDIT: bedankt sich bei allen, ich hatte ein anderes Paket, das in ihm mit der gleichen Klassennamen für das Problem verursacht. Es scheint, als ob es jetzt funktioniert.
1) Die 'paintComponent' Methode sollte zum Zeichnen von Grafiken verwendet werden, nicht zum Erstellen und Hinzufügen von Komponenten. Mach das im Konstruktor. 2) Wenn Sie die Schaltfläche zu "BorderLayout.CENTER" hinzufügen, wird 'setPreferredSize' nicht das tun, was Sie erwarten. Die Schaltfläche belegt den gesamten verfügbaren Speicherplatz. 3) Vergiss nicht 'super.paintComponent() 'am Anfang der' paintComponent' Methode zu nennen. Ist "MemButton" genauso wie "MemoryButton"? - Bitte denken Sie daran, ein [mcve] zu veröffentlichen, das das Problem reproduziert. –