爲什麼getPreferredSize()
得到下面的示例中,只調用時pack()
被調用兩次在JFrame
,如:的getPreferredSize()只包()後調用兩次
public class PackTest {
static JFrame f = new JFrame();
@SuppressWarnings("serial")
public static void main(String[] args) {
f.add(new JPanel() {
int i = 0;
@Override
public Dimension getPreferredSize() {
System.out.println("getPreferredSize() called");
if(i++ >= 2)
return new Dimension(200, 200); // This is never returned
else
return new Dimension(100, 100);
}
});
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
for(int i = 0; i < 10; i++) {
try {
TimeUnit.SECONDS.sleep(1);
} catch(InterruptedException e) {}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
System.out.println("Calling pack()");
f.pack();
}
});
}
}
}
似乎getPreferredSize()
只被稱爲長因爲它不斷返回一些不同的東西(例如,如果它每次都返回一個不同的維度,在這個例子中它會被調用10次)。爲什麼Swing會這樣做,以及如何讓pack()
正確調整JFrame
?
'pack()'在這個例子中被調用了10次,但'getPreferredSize()'只被調用了兩次。 – user21760