Java Swing:如何为组件定义一个最小维度(两个)?

时间:2010-10-05 20:00:50

标签: java swing size dimensions layout-manager

要成功定义最小尺寸,我必须执行以下操作:

// setting minimal width AND height
Dimension min = new Dimension(100, 100);
comp.setMinimumSize(min);
comp.setPreferredSize(min);
comp.setSize(min);

当我离开一行时,它不起作用,这很奇怪,但这不是重点。

我该怎么做才能限制只有一个的两个维度(宽度高度),让组件和/或布局管理器自动决定未指定的维度?

当我对该维度使用非常小的值时,我不想限制,许多组件显示错误(即太小)。

2 个答案:

答案 0 :(得分:4)

默认情况下(即,如果组件上未调用setMinimumSizegetMinimumSize委托给组件的布局管理器,那么您可以尝试重新定义getMinimumSize方法,如下所示: / p>

public Dimension getMinimumSize()
{
    return new Dimension(minWidth, super.getMinimumSize().height);
}

如果您这样做,请记住不要在组件上调用setMinimumSize

答案 1 :(得分:0)

我自己提出一种方法:

对于对齐一个轴(例如BoxLayout)的所有内容的布局管理器,可以指定“未定义的维度”设置为Integer.MAX。这很奇怪,但它确实有效。似乎忽略了与对齐轴相对的轴(除非它太小,如问题中所述)。

private final static int UNSPECIFIED_DIMENSION = Integer.MAX_VALUE;

public static void setMinimalDimension(Component comp, int width, int height) {
  Dimension dim = new Dimension(width, height);
  comp.setMinimumSize(dim);
  comp.setPreferredSize(dim);
  comp.setSize(dim);
}

public static void setMinimalWidth(Component comp, int width) {
  setMinimalDimension(comp, width, UNSPECIFIED_DIMENSION);
}

public static void setMinimalHeight(Component comp, int height) {
  setMinimalDimension(comp, UNSPECIFIED_DIMENSION, height);
}

如上所述,使用轴对齐布局管理器。

是的,还有另一个关于Java Swing的谜......