如何使swing组件的界限得到修复

时间:2011-10-06 13:25:56

标签: java swing resize layout-manager jcomponent

我有JPanel我添加了一些组件(复选框,组合等。)。我注意到,当框架最大化时,组件的边界也会移动或向右移动。然后,在恢复时,组件将移回原始位置。

在21英寸以上的显示器上,组件移位确实有所不同,因为您可以看到组件向右移动。

我们正在使用实现java.awt.LayoutManager2的自定义布局管理器。类内容非常大,因此将指向确定组件边界的区域。

protected int hMargin = 0;
..
Insets insets = target.getInsets();
Dimension size = target.getSize();

int  x = (size.width - insets.left - insets.right - 15 * hMargin);

从调用布局的框架中添加如下所示的组件:

JPanel  pl = new JPanel(new OurLayout(this))
//add the component to panel
pl.add(checkBox);
..

在我们决定x时,我想添加一行,以防止在添加调用面板的帧最大化时组件移位。

有人可以就如何实现这一点提出任何建议吗?示例代码将非常感激。

2 个答案:

答案 0 :(得分:2)

如果您有自定义布局管理器,那么布局管理器应该尊重面板的首选大小。问题出在您的布局管理代码上。

或者,对于一个简单的解决方案,将自定义面板添加到另一个使用FlowLayout的面板。然后,将尊重您的自定义面板的首选大小。

答案 1 :(得分:0)

感谢Thomascamickr提出的建议,我已经使用下面的一系列语法实现了解决方案。

      size=c.getMinimumSize();
      int dist =(size.width - insets.left - insets.right);
      int move = ((dist > 32) ? 35 : 38);
      x = (dist + move * hMargin);

再次感谢所有建议。