Архитектура Java Swing для просмотра представлений на основе JPane - PullRequest
0 голосов
/ 05 мая 2010

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

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

Я обнаружил, что, возможно, CardLayout ( Пример Cardlayout ) может быть подходящим решением для такой структуры, но я не могу найти способ переключать виды с кнопок, которые находятся внутри из JPanes, которые я реализовал в их отдельных классах,

Конечно, одним из способов было бы создать все экземпляры в родительском классе, как в небольшом примере с Java, но это не совсем чисто и не модульно для нескольких представлений, не так ли.

Как это можно реализовать, чтобы я мог получить доступ к методу переключения видов?

1 Ответ

2 голосов
/ 05 мая 2010

Да, CardLayout специально назначается, когда вы хотите переключаться между различными видами. Очевидно, что, как говорит @medoal, JTabbedPane также можно использовать. В любом случае, учитывая, что вы хотите использовать CardLayout с кнопками внутри панелей, позволяющими изменить видимую панель, вы могли бы сделать следующее:

  1. Создайте свои панели и дайте им возможность зарегистрировать объект, реализующий данный интерфейс. Этот интерфейс будет содержать метод, охватывающий метод CardLayout # show (Container, String) . Ну, например, если учесть, что у всех ваших панелей установлены имена, и у каждого из них разные имена, вы можете написать что-то вроде

    открытый интерфейс PanelToggler { public void toggleTo (имя строки); }

  2. В классе, содержащем CardLayout, вы бы реализовали PanelToggler с чем-то вроде

    public void toggleTo (String name) { ((CardLayout) getLayout ()). Show (this, name); }

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

...