1

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

我正在使用以下方法:

@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);
}

但这并不能解决我的问题。谁能告诉是否有另一种调整组件大小的方法?

4

2 回答 2

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

  • 如果您想通过拒绝 LayoutManager 以编程方式调整大小,那么您必须实现 ComponentListener 或 HierarchyListener

  • 在进行任何(上述)更改后,您必须调用 revalidate() 和 repaint()

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

于 2012-05-28T11:58:11.603 回答
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 采用该值,并使面板更宽一些(我必须这样做,因为在任何内部 JPanel 中都没有其他 JComponents)。

于 2012-05-28T11:44:59.910 回答