Java 如何在swing中调整与面板相关的组件的大小?
我想调整与其父组件(面板)相关的子组件的大小 我使用以下方法:Java 如何在swing中调整与面板相关的组件的大小?,java,swing,resize,Java,Swing,Resize,我想调整与其父组件(面板)相关的子组件的大小 我使用以下方法: @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); } 但这并不能解决我的问
@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);
}
但这并不能解决我的问题。有人能告诉我是否有其他方法可以调整组件的大小吗?您可以调用子组件上的
设置PreferredSize(维度d)
。如果打包JFrame,组件将尝试达到该大小
编辑:正如评论所说,最好避免
setPreferredSize(维度d)
,但我已经使用了该方法。例如:具有BorderLayout的JPanel,其中有3个JPanel(自定义类)。西面板和南面板(另一个为中间)的高度必须分别为0.1*宽度或高度,如果JPanel。我曾经
setPreferredSize(new Dimension(getPreferredSize().height, getPreferredSize().width * 0.1))
这很有效。Borderlayout采用了该值,使面板变得更宽(我不得不这样做,因为在任何内部JPanel中都没有其他JComponent)。- 使用适当的,没有理由提供
- 如果希望通过拒绝LayoutManager以编程方式调整大小,则必须实现ComponentListener或HierarchyListener
- 在任何(上述)更改之后,必须调用revalidate()和repaint()
- 如果要从任何侦听器调整大小,请通过Swing定时器延迟调整大小(400-500毫秒)事件,如果要调整大小继续定时器#restart()以避免闪烁或冻结
setPreferredSize()
这种方式是一种错误。在WEST
和SOUTH
面板上调用pack()
应该使它们采用显示封闭组件所需的大小,每个组件都应该计算自己的首选大小。如果内容包含文本,这是至关重要的。我在编辑中提到,在西部、南部或中部的JPanel中没有组件。我用它们来画画。啊,这是有道理的;替代getPreferredSize()
以反映图形的几何图形也是一个选项。编辑:我怀疑OP正在使用ChartPanel
;结合构造函数参数,这可能是一种有用的方法。没有更多的信息,我们都在猜测。