3

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

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

当我留下一条线时它不起作用,这很奇怪,但这不是重点。

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

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

4

2 回答 2

5

默认情况下(即如果setMinimumSize尚未在组件上调用)getMinimumSize委托给组件的布局管理器,因此您可以尝试重新定义该getMinimumSize方法,如下所示:

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

如果您这样做,请记住您不应该调用setMinimumSize该组件。

于 2010-10-05T20:09:40.263 回答
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 还有另一个谜团……

于 2010-10-05T20:22:57.717 回答