Образцовый предъявитель представления и составные представления

Я пытаюсь следовать за MVP (конкретно Пассивное Представление), шаблон в Java качает ui приложение.

Базовая конструкция приложения напоминает управлению мастером. Экран разделен к двум основным частям:

  • активное представление.
  • статическая панель навигации, с кнопками навигации.

Пользователь может использовать кнопки для изменения активного представления, но панель всегда отображается.

Моделируя этот сценарий, я имею набор 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 является общим, и doens't как таковые знают что-либо о JPanels. Очевидно, я не хотел бы, чтобы мои предъявители знали о JPanels также.

7
задан Asaf David 10 February 2010 в 21:14
поделиться

2 ответа

Не могли бы вы изменить определение View на:

interface View {
    JComponent getContainer();
}

Чтобы каждое представление могло легко получить содержимое представления? Оболочка не должна знать, какая реализация JComponent возвращается.

1
ответ дан 7 December 2019 в 16:42
поделиться

Интерфейс вашего представления должен обеспечивать способ получения чего-либо, отображаемого в JPanel:

interface View {
    Component getComponent();
}

Затем в ShellFrame (при условии, что вы используете BorderLayout, как и я) вы можете установить представление следующим образом:

public setActiveView(View activeView) {
   activePanel.add(activeView.getComponent(), BorderLayout.CENTER);     
}
1
ответ дан 7 December 2019 в 16:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: