Ich rufe eine Methode, die 5 Objekte instanziiert und fügt sie zu einem ArrayList
hinzu. Wenn ich eine andere Methode anrufe, um die Größe des ArrayList
auszudrucken, zeigt es an, dass die Größe 5 ist. Wenn paintComponent
genannt wird, nachdem ich JPanel
einen erzeuge, und versuche, die Größe des ArrayList
von paintComponent
zu drucken, zeigt es das Größe als 0. Blick auf die Reihenfolge System.out.println
's ich weiß paintComponent
wird aufgerufen, nachdem ich Objekte zu ArrayList
erstellen und hinzufügen. Warum wird ArrayList
als leer angezeigt?Größe eines Arrays wird 0, wenn PaintComponent aufgerufen wird
(Dies ist mein zweiter Versuch in einem kurzen nachprüfbaren Beispiel)
Erwartete Ausgabe:
Größe, printInfo: 5
Größe, printInfo: 5
Größe, paintcomponent: 5
Größe, paintcomponent : 5
Tatsächliche Ausgabe
Größe, printInfo: 5
Größe, printInfo: 5
Größe, paintcomponent: 0
Größe, paintcomponent: 0
Item:
public class Item{
//Empty
}
Panel:
import java.awt.Graphics;
import java.util.ArrayList;
import javax.swing.JPanel;
public class Panel extends JPanel{
ArrayList<Item> stuff = new ArrayList<Item>();
public void paintComponent(Graphics g){
super.paintComponent(g);
System.out.println("Size, paintComponent: " + stuff.size());
}
public void setUpPanel(){
for (int i = 0; i<5; i++)
stuff.add(new Item());
}
public void printInfo(){
System.out.println("Size, printInfo: " + stuff.size());
}
}
Rahmen:
import javax.swing.JFrame;
public class Frame extends JFrame{
public static void main (String args[]){
Panel j = new Panel();
j.setUpPanel();
j.printInfo();
Frame frame = new Frame();
j.printInfo();
}
public Frame(){
super("Test");
add(new Panel());
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800,600);
setLocationRelativeTo(null);
}
}
Klassifizieren Sie Ihre Klasse 'Frame' nicht. Es gibt eine AWT-Klasse mit diesem Namen. Machen Sie Ihren Klassennamen beschreibender, um Verwirrung zu vermeiden. – camickr
Danke für den Zeiger. In meinem eigentlichen Programm haben sie echte Namen, das habe ich nur zum Beispiel gemacht. – ulw1
Der Code, den Sie hier posten, sollte echter Code in Form eines 'MCVE' sein, damit wir genau wissen, was Sie tun. Dies wurde bereits in Ihrer letzten Frage erwähnt: http://stackoverflow.com/questions/40815724/pack-method-called-from-actionperformed-functions-only-omestimes und die Frage davor: http: // stackoverflow .com/fragen/40794576/how-to-force-jpanels-mit-gridbaglayout-to-resize-with-jframe – camickr