качать вопрос о контроле размера на максимизации - PullRequest
2 голосов
/ 03 апреля 2011

У меня есть JFrame со следующим макетом и компонентами:

 _________________________________________ 
 |  __________________________________    | 
 |  |JTree   |   Panel2              | *  |
 |  |(Panel1)| (other controls)      |<-> |
 |  |________|_______________________|    |
 |__________*_____________________________|

Они находятся в области содержимого основного JFrame.
То, что я хочу, это когда я максимизирую окно, чтобы эти компоненты соответственно изменили размеры.
Что происходит сейчас, так это то, что они остаются в своем текущем размере, и там, где у меня есть стрелка и звезды, есть огромный разрыв (сторона и низ).
Я хотел бы остаться упакованным.
Я использовал пустой макет для панели содержимого и удалил компоненты из визуального дизайнера.
Как я могу сделать так, чтобы элементы управления всегда изменяли размер при отображении мазима?

Ответы [ 3 ]

4 голосов
/ 03 апреля 2011

Если вы хотите, чтобы две панели имели одинаковый размер, каждая из которых занимает половину основного окна, используйте GridLayout:

getContentPane().setLayout(new GridLayout(1,2));
getContentPane().add(Panel1);
getContentPane().add(Panel2);

Если вы хотите, чтобы одна панель имела постоянную ширину, используйте BorderLayout:

getContentPane().setLayout(new BorderLayout());
getContentPane().add(Panel1,BorderLayout.EAST);
getContentPane().add(Panel2,BorderLayout.CENTER);

Если вы хотите более сложное поведение, например, для поддержания соотношения ширины 1: 2, вам придется использовать GridBagLayout, который является наиболее мощным, но также и самым сложным макетом:

getContentPane().setLayout(new GridBagLayout());
getContentPane().add(Panel1,new GridBagConstaints(0,0,1,1,1,1,GridBagConstraints.CENTER,GridBagLayout.BOTH,new Insets(0,0,0,0),0,0);
getContentPane().add(Panel2,new GridBagConstaints(1,0,1,1,2,1,GridBagConstraints.CENTER,GridBagLayout.BOTH,new Insets(0,0,0,0),0,0);
3 голосов
/ 03 апреля 2011

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

2 голосов
/ 03 апреля 2011

Если вы будете искать SO, вы, вероятно, получите много разных мнений. Однако есть одна общая истина: вы должны иметь хотя бы базовое понимание того, как работает определенный менеджер макетов, прежде чем даже думать об использовании визуального дизайнера.

Сказав это, лучшие результаты, которые я получил, и то, что я сейчас использую в производстве, - это сочетание WindowBuilderPro и MigLayout в качестве менеджера компоновки.

Я на самом деле использую MigLayout как макет таблицы. Я помещаю свои компоненты в ячейки и устанавливаю для каждой ячейки такие атрибуты, как «растут» - если я хочу расширить размеры, минимальный / преф / максимальный размер, выравнивание и т. Д. Я могу настроить компоненты так, чтобы они охватывали ячейки, и я получаю именно то, что нужно. Я хочу.

Отличительной особенностью WindowBuilder является то, что вы можете изменить сгенерированный код, не мешая дизайнеру, и сгенерированный код на самом деле симпатичен:)

...