Java Swing: Как определить одно минимальное измерение (из двух) для компонентов? - PullRequest
1 голос
/ 06 октября 2010

Чтобы определить минимальный размер успешно, я должен сделать следующее:

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

Когда я пропустил одну строку, это не работает, что странно, но это не главное.

Что нужно сделать, чтобы ограничить только одним из двух измерений (ширина или высота) и позволить компоненту и / или менеджеру компоновки автоматически принять решение о неопределенном размерность?

Когда я использую очень маленькое значение для этого измерения, которое я не хочу ограничивать, многие компоненты отображаются неправильно (т.е. слишком маленькими). ​​

Ответы [ 2 ]

4 голосов
/ 06 октября 2010

По умолчанию (т. Е. Если setMinimumSize не был вызван для компонента) getMinimumSize делегирует диспетчеру компоновки компонента, поэтому вы можете попытаться переопределить метод getMinimumSize следующим образом:

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

Если вы сделаете это, помните, что вы не должны вызывать setMinimumSize на компоненте.

0 голосов
/ 06 октября 2010

Я предлагаю подход самостоятельно:

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

...