Hallo,
da mein anderer Thread eher unübersichtlich war, versuche ich hier einmal mein Vorhaben zu beschreiben.
Ich möchte mittels der MVC Architektur ein Fenster erstellen. Auf diesem Frame soll sich ein Button befinden, der einen neuen Tab ntab öffnet, wenn er gedrückt wird.
In jedem ntab soll sich ein Panel befinden, dass ich in eine seperate Klasse ausgelagert habe, da dieses Panel etwas mehr Code benötigt.
Derzeit habe ich also 5 Klassen:
Die Main Klasse, in der ich das Model, den Viewer (mit Übergabe des Models) sowie den Controller (mit Übergabe des Model und Viewer) erzeuge.
Dann habe ich die Viewer Klasse, in der ich einiges an meinem Hauptfenster erstelle. In dieser Klasse befindet sich eine Methode, die der Controller aufruft und in der ein Objekt der Klasse Tab23 erstellt wird.
Außerdem habe ich noch eine Controller Klasse. In dieser habe ich eine innere Klasse für Button1:
Das Model ist für mein Problem unwichtig.
Weiter habe ich noch die Klasse Tab23, in der ich ein Panel erstelle, welches ich dann in der Klasse Viewer dem TabbedPane hinzufüge:
1. Frage: Ist die Auslagerung eines Teiles meines GUI in eine neue Klasse in Ordnung (bzw. wird das so gemacht)? Wenn nicht, wie geht man dann vor, wenn man die GUI in Komponenten aufteilen möchte?
2. Frage: Wie implementiere ich den ActionListener für den Button2, der sich in der Klasse Tab23 befindet? In einem anderen Thread wurde bemängelt, dass
schlecht sei. Mir fällt aber kein anderen Weg ein, meinen Button2 mit einem Listener auszustatten, wenn ich über innere Klasse gehen möchte.
3. Frage: Wenn ich durck Klicken auf Button1 die Methode ausgelagerteGuierstellen aufrufe, dann erstelle ich ein Objekt von der Klasse Tab23. Drücke ich den Button1 erneut, wird das Objekt natürlich überschrieben und ist zum Beispiel nachher nicht mehr zugänglich. Muss ich die Objekte von Tab23 dann in einer ArrayList speichern? Wenn der Nutzer sich dann in einem bestimmten Tab befindet, dann müsste ich in der Arraylist nach dem entsprechenden Objekt suchen und kann dieses dann verändern. Klingt recht aufwendig...
Anmerkung: Es geht mir nicht um irgendwelche Methodennamen oder dergleichen(die in diesem Beispiel natürlich nicht schön gewählt sind), sondern alleine um diese drei Fragen.
da mein anderer Thread eher unübersichtlich war, versuche ich hier einmal mein Vorhaben zu beschreiben.
Ich möchte mittels der MVC Architektur ein Fenster erstellen. Auf diesem Frame soll sich ein Button befinden, der einen neuen Tab ntab öffnet, wenn er gedrückt wird.
In jedem ntab soll sich ein Panel befinden, dass ich in eine seperate Klasse ausgelagert habe, da dieses Panel etwas mehr Code benötigt.
Derzeit habe ich also 5 Klassen:
Die Main Klasse, in der ich das Model, den Viewer (mit Übergabe des Models) sowie den Controller (mit Übergabe des Model und Viewer) erzeuge.
Dann habe ich die Viewer Klasse, in der ich einiges an meinem Hauptfenster erstelle. In dieser Klasse befindet sich eine Methode, die der Controller aufruft und in der ein Objekt der Klasse Tab23 erstellt wird.
Außerdem habe ich noch eine Controller Klasse. In dieser habe ich eine innere Klasse für Button1:
Java:
class Controller{
Viewer viewer;
Model model;
Controller(View viewer, Model model){
this.viewer = viewer;
this.model = model;
view.addButton1(new Button1Listener());
}
class Button1Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
view.ausgelagerteGuierstellen();
view.neu.addButton2Listener(new Button2Listener());
}
}
class Button2Listener implements ActionListener{
public void actionPerformed(ActionEvent e) {
//irgendwas
}
}
}
Das Model ist für mein Problem unwichtig.
Weiter habe ich noch die Klasse Tab23, in der ich ein Panel erstelle, welches ich dann in der Klasse Viewer dem TabbedPane hinzufüge:
Java:
class Tab23{
JPanel panel;
JButton button2;
void erstellen(){
panel = new JPanel();
button2 = new JButton("Button2");
panel.add(button2);
}
void addButton2Listener(ActionListener e){
button2.addActionListener(e);
}
}
}
Java:
class Viewer{
JButton button1;
JTabbedPane tab;
Viewer(...){
button1 = new JButton();
tab = new JTabbedPane();
}
void addButton2Listener(ActionListener mal) {
Button1.addActionListener(mal);
}
void ausgelagerteGuierstellen(){
Tab23 neu = new Tab23();
tab.add("String", neu.panel);
}
}
1. Frage: Ist die Auslagerung eines Teiles meines GUI in eine neue Klasse in Ordnung (bzw. wird das so gemacht)? Wenn nicht, wie geht man dann vor, wenn man die GUI in Komponenten aufteilen möchte?
2. Frage: Wie implementiere ich den ActionListener für den Button2, der sich in der Klasse Tab23 befindet? In einem anderen Thread wurde bemängelt, dass
Java:
view.neu.addButton2Listener(new Button2Listener());
3. Frage: Wenn ich durck Klicken auf Button1 die Methode ausgelagerteGuierstellen aufrufe, dann erstelle ich ein Objekt von der Klasse Tab23. Drücke ich den Button1 erneut, wird das Objekt natürlich überschrieben und ist zum Beispiel nachher nicht mehr zugänglich. Muss ich die Objekte von Tab23 dann in einer ArrayList speichern? Wenn der Nutzer sich dann in einem bestimmten Tab befindet, dann müsste ich in der Arraylist nach dem entsprechenden Objekt suchen und kann dieses dann verändern. Klingt recht aufwendig...
Anmerkung: Es geht mir nicht um irgendwelche Methodennamen oder dergleichen(die in diesem Beispiel natürlich nicht schön gewählt sind), sondern alleine um diese drei Fragen.
Zuletzt bearbeitet: