0

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

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 。

谢谢,迈克尔。

4

1 回答 1

1

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

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

于 2013-07-28T11:26:37.747 回答