Hallo,
ich habe eine GUI-Anwendung geschrieben, die ein JTabbedPane integriert. Um den Code übersichtlich zu halten und inhaltlich voneinander abzugrenzen, stellt jeder Tab eine neue View mit eigenem Controller und Model dar. Die aktuelle Umsetzung der MVC Architektur ist unglücklich, da ich mit einem Controller ausschließlich auf die damit assoziierte View und Model zugreifen kann. Ich möchte mit beliebigem Controller, auf beliebige Views zugreifen.
Beispielklasse "MainFrame":
Beispielklasse "MainController":
Beispielklasse "TabViewA" (analog "TabViewB"):
Beispielklasse "TabControllerA" (analog "TabControllerB"):
Die Controller der Tabs A und B können folglich ausschließlich auf GUI-Elemente der mit ihnen verknüpften View zugreifen. Wie ist es möglich, auf Views anderer Tabs oder auf den des MainFrame zuzugreifen, ohne diese dem jeweiligen Controller-Konstruktor zu übergeben (bei zehn Tabs würden zehn zusätzliche Views übergeben = unschön!)? Wie werden in einer größeren Anwendung die verschiedenen Views sowie Controller miteinander verknüpft? Ich habe im Internet kein Tutorial gefunden, dass MVC an mehreren (ineinander verschachtelten) Views erklärt.
Vielen Dank für eure Bemühungen!
ich habe eine GUI-Anwendung geschrieben, die ein JTabbedPane integriert. Um den Code übersichtlich zu halten und inhaltlich voneinander abzugrenzen, stellt jeder Tab eine neue View mit eigenem Controller und Model dar. Die aktuelle Umsetzung der MVC Architektur ist unglücklich, da ich mit einem Controller ausschließlich auf die damit assoziierte View und Model zugreifen kann. Ich möchte mit beliebigem Controller, auf beliebige Views zugreifen.
Beispielklasse "MainFrame":
Java:
public class MainFrame extends JFrame {
private JTabbedPane tabbedPane;
private JButton btnCancel;
public MainFrame() {
this.setTitle("Beispielanwendung");
this.contentPane = new JPanel();
this.tabbedPane = new JTabbedPane(JTabbedPane.LEFT);
this.contentPane.add(this.tabbedPane, BorderLayout.CENTER);
this.btnCancel = new JButton("Cancel");
TabModelA tabModelA = new TabModelA();
TabViewA tabViewA = new TabViewA();
TabControllerA tabControllerA = new TabControllerA(tabModelA, tabViewA);
this.tabbedPane.addTab("Tab A", new JScrollPane(tabViewA));
TabModelB tabModelB = new TabModelB();
TabViewB tabViewB = new TabViewB();
TabControllerB tabControllerB = new TabControllerB(tabModelB, tabViewB);
this.tabbedPane.addTab("Tab B", new JScrollPane(tabViewB));
// TODO Instanziierung weiterer Tabs.
}
public void addBtnCancelListener(ActionListener l) {
this.btnCancel.addActionListener(l);
}
}
Beispielklasse "MainController":
Java:
public class MainController {
private MainModel mainModel;
private MainFrame mainFrame;
public MainController(MainModel mainModel, MainFrame mainFrame) {
this.mainModel = mainModel;
this.mainFrame = mainFrame;
addListener();
}
public void addListener() {
this.mainFrame.addBtnCancelListener(new BtnCancelListener());
}
class BtnCancelListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
mainFrame.dispose();
}
}
}
Beispielklasse "TabViewA" (analog "TabViewB"):
Java:
public class TabViewA extends JPanel {
// TODO Initialisierung verschiedener GUI-Elemente (Labels, Buttons, ...).
}
Beispielklasse "TabControllerA" (analog "TabControllerB"):
Java:
public class TabControllerA {
private TabModelA tabModelA;
private TabViewA tabViewA;
public TabControllerA(TabModelA tabModelA, TabViewA tabViewA) {
this.tabModelA = tabModelA;
this.tabViewA = tabViewA;
addListener();
}
public void addListener() {
// TODO Listener hinzufügen.
}
// TODO Interne Klassen, die das Interface "ActionListener" implementieren.
}
Die Controller der Tabs A und B können folglich ausschließlich auf GUI-Elemente der mit ihnen verknüpften View zugreifen. Wie ist es möglich, auf Views anderer Tabs oder auf den des MainFrame zuzugreifen, ohne diese dem jeweiligen Controller-Konstruktor zu übergeben (bei zehn Tabs würden zehn zusätzliche Views übergeben = unschön!)? Wie werden in einer größeren Anwendung die verschiedenen Views sowie Controller miteinander verknüpft? Ich habe im Internet kein Tutorial gefunden, dass MVC an mehreren (ineinander verschachtelten) Views erklärt.
Vielen Dank für eure Bemühungen!