要成功定义最小尺寸,我必须执行以下操作:
// setting minimal width AND height
Dimension min = new Dimension(100, 100);
comp.setMinimumSize(min);
comp.setPreferredSize(min);
comp.setSize(min);
当我离开一行时,它不起作用,这很奇怪,但这不是重点。
我该怎么做才能限制只有一个的两个维度(宽度或高度),让组件和/或布局管理器自动决定未指定的维度?
当我对该维度使用非常小的值时,我不想限制,许多组件显示错误(即太小)。
答案 0 :(得分:4)
默认情况下(即,如果组件上未调用setMinimumSize
)getMinimumSize
委托给组件的布局管理器,那么您可以尝试重新定义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的谜......