2013-08-02 6 views
4

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

Я просмотрел Java API и нашел класс CardLayout; я направляюсь в правильном направлении или есть более простой способ? (Страница CardLayout несколько сложна и рекомендована для тех, кто хочет вручную закодировать все).

Я знаю, что есть методы validate() и repaint() в JFrame, но это может быть нецелесообразно использовать для них. Я уже не совсем новичок, но и не очень опытный, так что несите меня.

Любое руководство было бы полезно. Большое спасибо.

+0

проверьте эту ссылку http: //archive.cpradio. org/code/javascript/dual-monitors-and-windowopen/ –

+0

Вы можете удалить всех детей из контейнера верхнего уровня и полностью перестроить его каждый раз. –

+0

Да, 'CardLayout', вероятно, лучший выбор для этого – MadProgrammer

ответ

4

Да, Cardlayout может использоваться для выключения "Cards", то есть различных панелей, которые видны на экране.

Вы также можете переключаться JPanels непосредственно

jframe.getContentPane().remove(...); // Remove old panel from layout 
jframe.getContentPane().add(...); 
jframe.validate(); 
jframe.repaint() 

Имейте в виду, что различные Макеты работают по-разному, так что нет единого решения, которое работает каждый раз. Просматривайте документацию для разных менеджеров LayoutManager, чтобы узнать, как они работают.

0

Я лично удалю все компоненты JFrame. Нечто подобное:

myFrame.getContentPane().removeAll(); 

А затем добавить совершенно новое содержание панели, а затем перекрасить и перепроверить рамку.

2

Вы можете использовать TabbedPane, скрыть вкладки и программно их перевести из приложения.

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

Но да, CardLayout есть (в общем) хороший способ пойти.

У вас может возникнуть соблазн вручную добавить и удалить панели на JFrame. Я бы посоветовал это сделать - вы можете устранить некоторые проблемы с рендерингом, и ваш код станет более сложным. Кроме того, поскольку у вас уже есть специальные классы для этого, вы должны использовать их вместо того, чтобы изобретать колесо.

0

Создайте каждый экран как один JPanel (добавьте компоненты экрана в JPanel). Когда вы знаете, какой экран требуется, используйте JFrame.setContentPane(Container contentPane). Это заменит все в JFrame, кроме меню. Если вам нужно, чтобы некоторые части страницы остались такими же, вы должны использовать макет на contentPane и установить экран только на одну часть макета (в зависимости от компоновки, см. Подробности о подробностях here)

Смежные вопросы