我想调整与其父级(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);
}
但它并没有解决我的问题。任何人都可以判断是否有其他方法可以调整组件大小?
答案 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)。