paintComponent中的setPreferreSize()

时间:2013-07-28 11:21:25

标签: size jpanel paintcomponent

我正在从paintComponent()方法中计算JPanel的宽度。计算有效,但JPanel没有首选大小。如果我调整窗口大小,一切都应该是它应该是,并且JPanel具有正确的大小。我试图将repaint()方法放在不同的地方(例如在JPanel的构造函数或它嵌入的JFrame中),但我没有找到一个解决方案,它将显示具有正确大小的框架。 / p>

public void paintComponent(Graphics g) {
 super.paintComponent(g);
 g.setFont(new Font("SANS_SERIF",Font.PLAIN,14));
 FontMetrics metrics;
 ...  

 boxwidth = ... dependent on width and height of some Strings

 ...

 if (getPreferredSize().getWidth()<boxwidth+100){
 setPreferredSize(new Dimension(boxwidth+100,600));
 }

 ... 

}

我想知道,我可以在paintComponent()方法中设置首选大小,或者如果我能以其他方式获取指标,则能够在paintComponent之外计算 boxwidth ( )。

谢谢,迈克尔。

1 个答案:

答案 0 :(得分:0)

在设置首选大小后调用JFrame上的pack(),它会调整JFrame的大小以适应所有子组件的首选大小,这种方法的隐藏程度非常烦人。

http://docs.oracle.com/javase/7/docs/api/java/awt/Window.html#pack()