Java: один кадр против нескольких кадров - PullRequest
4 голосов
/ 20 февраля 2012

Подумайте о классическом процессе установки, когда у вас есть кнопка «Далее», и когда вы щелкаете по ней, содержимое окна изменяется. Чтобы представить эту ситуацию, я подумал о двух возможных решениях:

- при нажатии «Далее» уничтожить текущий JFrame и создать новый JFrame, возможно передавая его конструктору полезную информацию (например, фактический размер окна, содержимое, вставленное пользователем в текущий кадр, ...)

- при нажатии кнопки «Далее» удаляются все компоненты из текущего JFrame и добавляются новые компоненты по мере необходимости.

Первое решение выглядит лучше в OOprogramming, потому что я могу хранить отдельные классы для разных фреймов и избегать огромных методов, которые очищают фрейм и заполняют его заново. Однако первое решение звучит немного «грязно», и я должен передать много параметров новому кадру. Чтобы представить эту ситуацию, я бы выбрал второе решение.

Теперь подумайте о меню с компонентом «option»: в этой ситуации я создал бы новый JFrame при нажатии «option», чтобы я мог заполнить его пунктами option. Это правильное решение? Есть ли способ, которым я всегда могу узнать, какое из них является лучшим решением? Есть ли какие-то решения, о которых я не думал?

Ответы [ 2 ]

5 голосов
/ 20 февраля 2012

Уничтожение основного JFrame было бы глупо - не говоря уже о сотрясении для пользователя. Просто используйте один JFrame и измените его содержимое.

Для реализации мастера установки используйте один JFrame, содержащий одну большую JPanel сверху и меньшую, содержащую кнопки «Далее», «Назад», «Отмена» внизу. Когда нажимаются кнопки Next или Back, вы заменяете большую JPanel. У вас может быть много разных JPanel подклассов, по одному на каждую "страницу" мастера.

Существует LayoutManager, называемый CardLayout, который идеально подходит для реализации этого сценария - он управляет «стеком» компонентов и показывает только один из этих компонентов одновременно. Используйте BorderLayout в JFrame. В центральную позицию поставьте JPanel с CardLayout. Затем добавьте отдельные страницы мастера к этому JPanel, чтобы CardLayout мог ими управлять.

3 голосов
/ 20 февраля 2012

CardLayout хорошо подходит для этого. Вы просто меняете содержимое JPanel при нажатии кнопки «Далее».

...