5つのオブジェクトをインスタンス化し、ArrayList
に追加するメソッドを呼び出します。 ArrayList
のサイズを印刷する別のメソッドを呼び出すと、サイズが5であることが表示されます。JPanel
を作成してJFrame
に追加してのサイズをpaintComponent
から印刷しようとしたときに、paintComponent
が呼び出されます。サイズは0です。System.out.println
の順番を見ると、にオブジェクトを作成して追加した後にpaintComponent
が呼び出されています。 ArrayList
が空白として表示されるのはなぜですか?PaintComponentが呼び出されたときに配列のサイズが0になる
(ショート検証例では、この私の第二の試み)
予想される出力:
サイズ、PRINTINFO:5
サイズ、PRINTINFO:5
サイズ、paintComponent:5
サイズ、paintComponent :5
実際の出力
サイズ、PRINTINFO:5
サイズ、PRINTINFO:5
サイズ、paintComponent:0
サイズ、paintComponent:0
アイテム:
public class Item{
//Empty
}
パネル:
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());
}
}
フレーム:
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);
}
}
クラス 'フレーム'をクラス化しないでください。その名前のAWTクラスがあります。混乱を避けるために、あなたのクラス名をより分かりやすくしてください。 – camickr
ポインタありがとう。私の実際のプログラムでは、彼らは実名を持っています。 – ulw1
あなたがここに投稿するコードは、あなたがしていることを正確に知るために、 'MCVE'の形で実際のコードでなければなりません。これはすでにあなたの最後の質問であなたに言及されています:http://stackoverflow.com/questions/40815724/pack-method-called-from-actionperformed-functions-only-sometimesとその前の質問:http:// stackoverflow .com/questions/40794576/how-to-force-jpanels-using-gridbaglayoutからjframeへのリサイズ – camickr