Я предлагаю подход самостоятельно:
Для менеджеров компоновки, которые выравнивают все по одной оси (например, 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 ...