如何在摆动中调整与面板相关的组件?

时间:2012-05-28 11:41:03

标签: java swing resize

我想调整与其父级(Panel)相关的子组件的大小。

我使用以下方法:

@Override
public Dimension getPreferredSize() {
Dimension d = getParent().getSize();
int w = d.width * wid / 100;
int h = d.height * he / 100;
//System.out.println("x"+w+"h"+h);
return new Dimension(w,h);
}

但它并没有解决我的问题。任何人都可以判断是否有其他方法可以调整组件大小?

2 个答案:

答案 0 :(得分:3)

  • 使用正确的LayoutManager,没有理由提供

  • 如果你想通过拒绝LayoutManager来调整programaticaly的大小,那么你必须实现ComponentListener或HierarchyListener

  • 在任何(上述)更改之后,您必须调用revalidate()并重新绘制()

  • 如果你想从任何监听器调整大小,请通过Swing Timer延迟调整大小(400-500毫秒)事件,如果调整大小继续Timer#restart()以避免闪烁或冻结,

答案 1 :(得分:0)

您可以在子组件上调用setPreferredSize(Dimension d)。如果打包JFrame,组件将尝试变为该大小。


编辑:正如评论所说,最好避免setPreferredSize(Dimension d),但我已经使用了该方法。例如:带有BorderLayout的JPanel,其中有3个JPanel(自定义类)。如果JPanel,WEST和SOUTH面板(另一个是CENTER)必须分别具有0.1 *宽度或高度的高度。我用了

setPreferredSize(new Dimension(getPreferredSize().height, getPreferredSize().width * 0.1))

运作良好。 Borderlayout取得了这个值,并使Panel变得更宽(我必须这样做,因为在任何内部JPanel中都没有其他JComponents)。