Я пытаюсь выполнить шаблон MVP (в частности, пассивный) в приложении java swing ui.Model View Presenter and Composite Views
Основная конструкция приложения напоминает элемент управления мастером. Экран разделен на две основные части:
- Активный просмотр.
- статическая навигационная панель с кнопками навигации.
Пользователь может использовать кнопки для изменения активного вида, но панель всегда отображается.
Моделирование этого сценария. У меня есть куча diffirent screers, каждый со своим собственным презентатором, интерфейсом представления и реализацией представления (используя JPanel). Затем у меня есть презентатор Shell, просмотр intefrace и просмотр реализации с использованием JFrame. Идея состоит в том, что оболочка будет загружаться сначала и всегда отображаться, отображая нижнюю панель навигации и оставляя пространство для активного просмотра. Ведущая оболочка позволяют установить текущий активный экран, примерно так:
interface View {
}
class Presenter {
View view;
public Presenter(View view) {
this.view = view;
}
public View getView() {
return view;
}
}
interface ShellView extends View {
void setActiveView(View activeView);
}
class ShellPresenter extends Presenter {
private ShellView shellView;
public void setActivePresenter(Presenter activePresenter) {
shellView.setActiveView(activePresenter.getView());
}
}
class ShellFrame implements ShellView {
private JFrame frame;
private JPanel activePanel;
private JPanel navigationBar;
public ShellFrame() {
Container c = frame.getContentPane();
c.add(activePanel);
c.add(navigationBar);
}
public setActiveView(View activeView) {
???
}
}
Проблема заключается в методе setActiveView: Я не уверен, как установить ActiveView к ActivePanel, когда View интерфейс вообще и поэтому ничего не знает о JPanels. Очевидно, я бы не хотел, чтобы мои докладчики знали о JPanels.
Вы когда-нибудь выясняли, как это сделать? Ни один из этих ответов не является особенно хорошим. Я только что написал эту тему: http://stackoverflow.com/questions/17836421/how-dumb-can-mvp-views-really-be – durron597