Почему getPreferredSize () возвращает размер, который слишком мал для этого JDialog? - PullRequest
1 голос
/ 25 марта 2010

В нашем продукте у нас есть кадры, которые в основном на три уровня наследования ниже, чем, по сути, JDialog. Этот кадр переопределяет метод pack() по умолчанию, как показано:

@Override
public void pack() {
    this.setSize(getMaximumSize());
    validate();
    super.pack();
}

@Override
public Dimension getMaximumSize(){
    return super.getPreferredSize();
}

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

Моя проблема заключается в том, что когда он вызывает getPreferredSize() для контейнера, результат слишком мал, то есть ширина кажется приемлемой, а высота - нет. Читая документы, кажется, что предпочтительный размер вычисляется на основе менеджера компоновки, если он не установлен явно (что я уверен, что это не так). Я не совсем уверен, как он рассчитывает, или я должен сначала сделать что-то еще.

У кого-нибудь есть идеи или мысли относительно того, что моя проблема может быть здесь? Это не всегда слишком мало, только иногда. Пожалуйста, дайте мне знать, какая другая информация / код может быть полезен для выяснения этого. Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 марта 2010

Похоже, что в диалог добавляются вещи после pack() и getPreferredSize(), однако эти дополнения не меняют размеры должным образом.

Как это часто бывает, ответ оказался довольно пешеходным и очевидным.

0 голосов
/ 25 марта 2010

Я полагаю, что большинство макетов будет использовать основную предпосылку получения предпочтительного размера непосредственных дочерних элементов контейнера, а затем возвращать минимальное измерение, которое будет содержать компоненты, расположенные с использованием их предпочитаемых размеров (быстрая проверка исходного кода показывает это относится к FlowLayout, BoxLayout и GridLayout). Итак, два предложения, которые я могу предложить:

  1. Прочитайте источник getPreferredLayoutSize (Container) для используемых вами макетов (или тех, которые вы используете чаще всего) и убедитесь, что они используют предпочтительные размеры для своих расчетов.
  2. Установите явно предпочитаемый размер для компонентов самого низкого уровня (элементов, которые не являются составной частью других компонентов), тогда у составных частей этих компонентов должен быть соответствующий предпочтительный размер относительно размера.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...