Работа с 2 или более кадрами - PullRequest
4 голосов
/ 25 октября 2011

У меня есть около 3 кадров в моем приложении Java Swing.Как правильно обращаться с этими кадрами?Я имею в виду какой-то шаблон или что-то еще.Теперь у меня всегда есть один класс, который представляет кадр, и один класс для панели, которая является основной в этом кадре.Теперь я определил кадры как статические переменные, и когда я хочу скрыть их, я вызываю classname.frameName.setVisible(false);

это правильное решение?

Ответы [ 4 ]

9 голосов
/ 25 октября 2011

Помимо (превосходных) предложений CardLayout или JFrame с несколькими экземплярами JDialog, здесь приведены некоторые другие стратегии, которые могут работать поодиночке или в комбинации, чтобы свести различные панели контента в один кадр.

  1. JDesktopPane / JInternalFames ( Тут. ).
  2. JSplitPane ( Тут. ).
  3. JTabbedPane ( Тут. ).
  4. JLayeredPane, если вы чувствуете себя смелым ( Тут. ).
  5. JToolBar - плавучий при необходимости ( Тут. ).
  6. Различные ограничения JPanel во вложенном макете .

Возможно, есть еще ..


Конечно, как указывал Адамски, есть еще некоторые причуды, которые следует учитывать ..

Что если в каждом кадре есть JMenuBars или JMenus?

Возможно объединить их как подменю.

5 голосов
/ 25 октября 2011

Взгляните на приличный док-каркас, такой как MyDoggy .Это позволяет отображать все три компонента в одном JFrame, но является очень гибким в том смысле, что вы можете просматривать данные бок о бок, изменять размеры и максимизировать компоненты.

4 голосов
/ 25 октября 2011

Этот дизайн кажется ущербным. Вместо того, чтобы иметь несколько контейнеров, вы должны использовать соответствующий менеджер макета. В этом случае я рекомендую использовать CardLayout. Таким образом, вы получите один контейнер с несколькими сменными представлениями .

2 голосов
/ 25 октября 2011

Управление кадрами с помощью статических ссылок представляется очень хрупким решением.Что если ссылка пуста?Что если фрейм не находится в завершенном состоянии, когда к нему вызывается setVisible()?

Возможно, было бы лучше разделить эту логику на отдельный класс, либо чтобы фреймы регистрировались вэто или построить все заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...