Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在swing中调整与面板相关的组件的大小?_Java_Swing_Resize - Fatal编程技术网

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()以避免闪烁或冻结


为了更快地获得更好的帮助,请发布一个。如果没有显示预期内容的SSCCE,则无法以当前形式回答此问题;投票关闭。通常,使用
setPreferredSize()
这种方式是一种错误。在
WEST
SOUTH
面板上调用
pack()
应该使它们采用显示封闭组件所需的大小,每个组件都应该计算自己的首选大小。如果内容包含文本,这是至关重要的。我在编辑中提到,在西部、南部或中部的JPanel中没有组件。我用它们来画画。啊,这是有道理的;替代
getPreferredSize()
以反映图形的几何图形也是一个选项。编辑:我怀疑OP正在使用
ChartPanel
;结合构造函数参数,这可能是一种有用的方法。没有更多的信息,我们都在猜测。