Tôi đang cố gắng theo mẫu MVP (cụ thể Passive-View) trong một ứng dụng java swing ui.View Model Presenter và Composite Xem
Thiết kế cơ bản của ứng dụng sẽ nhắc điều khiển trình hướng dẫn. Màn hình được chia thành hai phần chính:
- chế độ xem đang kích hoạt.
- thanh điều hướng tĩnh, có các nút điều hướng.
Người dùng có thể sử dụng các nút để thay đổi chế độ xem hiện hoạt, nhưng thanh luôn được hiển thị.
Tạo mô hình kịch bản này, tôi có một loạt các trình thu thập khác nhau, mỗi trình bày riêng của nó, giao diện xem và triển khai chế độ xem (sử dụng JPanel). Sau đó, tôi có một người trình bày Shell, xem intefrace và xem thực hiện, bằng cách sử dụng một JFrame. Ý tưởng là vỏ sẽ tải đầu tiên và luôn được hiển thị, hiển thị thanh điều hướng phía dưới và để lại một khoảng trống cho chế độ xem đang kích hoạt. Người dẫn chương trình shell sẽ cho phép thiết lập các màn hình hoạt động hiện nay, phần nào như thế này:
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) {
???
}
}
Vấn đề là trong phương pháp setActiveView: Tôi không chắc chắn làm thế nào để thiết lập các activeview đến activePanel, khi Xem giao diện là chung và như vậy không biết gì về JPanels. Rõ ràng là tôi cũng không muốn các diễn giả của tôi biết về JPanels.
Bạn đã bao giờ tìm ra cách để làm điều này? Không có câu nào trong số những câu trả lời này đặc biệt tốt. Tôi vừa đăng chủ đề này: http://stackoverflow.com/questions/17836421/how-dumb-can-mvp-views-really-be – durron597