Swing: установить фиксированный размер окна для JDialog

пробовал setPrefferedSize и метод setsize методы, но диалоговое окно по-прежнему открывается с минимальным размером.

private void method() {
    commandDialog.setPreferredSize(new Dimension(100,100));
    - - - 
    - - -   //Components added to dialogPanel

    commandDialog.add(dialogPanel);

    // Tried this as well: commandDialog.setSize(40, 40);     
    commandDialog.validate();
    commandDialog.setVisible(true);
}

2 ответов


Не забудьте позвонить pack() в диалоговом окне перед setVisible(true).

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


редактировать
Хольгер написал:

переопределение getPreferredSize() не лучше, если оно просто используется для возврата той же константы размер.

Я думаю, что мы все согласны, что имея getPreferredSize() возврат немого постоянного размера обычно следует избегать (хотя это стабильный). Большую часть времени я избегаю установки size/preferredSize или переопределения getPreferredSize, а скорее стараюсь иметь мои компоненты и их собственные предпочтительные размеры, а также менеджеры макетов сами по себе, что снова инициируется pack() метод. Иногда мне нужно будет взять более активный рулон в попытке установить размер компонента, например, если мне нужно изменить размер компонента на фоновое изображение, а затем я переопределю getPreferredSize() и используйте размеры изображения для возвращаемого измерения или используйте какой-либо тип логики программы, чтобы помочь выяснить лучший размер. Но опять же мы все можем согласиться с тем, что чем меньше вы фуц с этим, тем лучше.


Изменить 2
Хольгер написал:

... но вопрос в JDialog, и диалоги никогда не адаптируются сами к их предпочитаемому размеру автоматически.

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


ты

commandDialog.setSize(new Dimension(100, 100));
commandDialog.setResizable(false);

?