Kapselung if-Abfrage bei "MVC-verteilten" Listenern

baphomet13

Mitglied
Hi Alle,

hoffe der Titel ist korrekt gewählt.

Ich versuche, ein MVC-basiertes GUI zu erstellen und habe dabei Probleme, die if-Abfrage im ActionListener zu gestalten. Vielleicht kann mir jemand helfen? Das Ganze ist wie folgt aufgebaut:

View:
Java:
// ControlForms.java
...

private JPanel createSearchPanel() throws SQLException {

...

comboBoxCode = new JComboBox(); // Klassenvariable comboBoxCode -> JComboBox
        SwingUtilities.invokeLater(new Runnable() {  
            public void run() {  
            	AutoCompleteSupport<Object> support = AutoCompleteSupport.install(comboBoxCode, GlazedLists.eventListOf(jnlCodeArray));
            }  
        });  // Auto-Complete comboBox aus GlazedLists
...

	public void setComboListener(ComboListener comboListener) {
		comboBoxCode.addActionListener(comboListener);
	}
...

Controller:
Java:
 // Controller.java   
public Controller() throws SQLException{

...

    	addListeners();
    }

    private void addListeners(){
    	getView().setExitListener(new ExitListener());
    	getView().setTreeListener(new TreeListener(getView()));
    	getView().getFormPanel().setButtonListener(new ButtonListener());
    	getView().getFormPanel().setComboListener(new ComboListener());
    }

Java:
// ComboListener.java
public class ComboListener implements ActionListener {
	public void actionPerformed(ActionEvent e) {
		System.out.println(e.toString()); // Gibt keine Variablennamen mit aus...
	}
}

Ich will also letztendlich in der ComboListener.java so etwas abfragen wie
Java:
if (e.getSource() == comboBoxCode) ...
Das geht aber natürlich nicht, wenn ich den Variablennamen gar nicht übergeben bekomme. Andererseits soll ComboListener natürlich auch für andere JComboBoxes zur Verfügung stehen, so dass ich nicht ohne if-Abfrage arbeiten kann.

Hat jemand eine Idee? Ich habe ein Brett vor'm Kopf.

Bzw. vielleicht ist die Frage: (wie) kann ich den Variablennamen mit übergeben ohne dass ich alle Konstruktoren der Klassen anpassen muss, damit die aktuelle Instanz der View-Klasse übergeben werden kann?

Danke!
Grüße,
B13
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Ich würde mir da eher die Frage stellen: Muss der Controller die Variable mit der Referenz auf die ComboBox kennen?
Erfüllen die unterschiedlichen ComboBoxen überhaupt eine ähnliche Funktion? Wenn nein, würde ich für die Combos auch mehrere Listener verwenden.
 

baphomet13

Mitglied
Das ist natürlich so ein Punkt, aber spricht das nicht dem Prinzip der Wiederverwertbarkeit entgegen?

Wie sieht das denn in "guter" Codingpraxis aus (von der ich zugegebenermaßen noch nicht viel weiß, haha), hat man da oft für jedes Element einen eigenen Listener?

Danke erstmal für die Hilfe!
 

Crian

Top Contributor
Wenn du Wiederverwertung möchtest, kannst du ja eine eigene Listenerklasse schreiben, von der du bei den verschiedenen Comboboxen dann jeweils eine Instanz bildest.
 

tuttle64

Bekanntes Mitglied
Das ist natürlich so ein Punkt, aber spricht das nicht dem Prinzip der Wiederverwertbarkeit entgegen?

Wie sieht das denn in "guter" Codingpraxis aus (von der ich zugegebenermaßen noch nicht viel weiß, haha), hat man da oft für jedes Element einen eigenen Listener?


Listener werden häufig als anonyme Klasse implementiert, das spricht nicht gegen Wiederverwendbarkeit. Sofern innerhalb der Listeners komplexe Verarbeitung nötig ist, kann man diese Logik in eine Klasse auslagern, damit diese nur ein mal geschrieben werden muss. Das verhindert, das derselbe Code an verschiedenen Stellen innerhalb der Applikation repliziert werden muss, was gegen die Wartbarkeit spricht.

Was MVC betrifft, hilft Dir vielleicht noch dieser MVC Link weiter.
 

Michael...

Top Contributor
Das ist natürlich so ein Punkt, aber spricht das nicht dem Prinzip der Wiederverwertbarkeit entgegen?

Wie sieht das denn in "guter" Codingpraxis aus (von der ich zugegebenermaßen noch nicht viel weiß, haha), hat man da oft für jedes Element einen eigenen Listener?

Danke erstmal für die Hilfe!
Würde eher sagen, dass die Notwendigkeit der Kenntnis des Controllers von der Komponente bei einer Wiederverwendung Aufwand/Probleme machen kann.

Abhängig von der Komplexität der Applikation reicht manchmal ein einfacher (Action)Listener als Interface der View zum Controller aus.
Bei komplexeren Anwendungen würde ich ein "ControllerInterface" definieren, welches der View bekannt ist und über das sie die zur Verfügung stehenden "Dienste" des Controllers kennt und nutzen kann. Dann könnte man ActionListener & Co. innerhalb der View implementieren und ausschließlich über das selbst definiert Interface mit dem Controller kommunzieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
tom.j85 Exception bei Abfrage von Ländercodes in API? Allgemeine Java-Themen 13
T Fehler bei IF abfrage Allgemeine Java-Themen 8
D Mehrdimensionale Abfrage Allgemeine Java-Themen 15
MiMa If-Abfrage mit Parameter Allgemeine Java-Themen 8
kodela Binäre Abfrage Allgemeine Java-Themen 12
D MAC Adressen Abfrage Allgemeine Java-Themen 5
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
B Swing Hilfe bei Abfrage von Benutzernamen und Passwort Allgemeine Java-Themen 2
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
B Java Abfrage Netzbetrieb oder Akkubetrieb Allgemeine Java-Themen 1
T Login-Abfrage Allgemeine Java-Themen 3
T Login mit LDAP-Abfrage Allgemeine Java-Themen 3
M Event Handling Tastatur abfrage Allgemeine Java-Themen 5
2 If-Abfrage um Uhrzeit einzuordnen Allgemeine Java-Themen 2
F Java ip abfrage mit Dateiausgabe ? Allgemeine Java-Themen 2
V Java Editor Problem mit ! bei if-Abfrage Allgemeine Java-Themen 5
N Schlüsselworte if abfrage ob linke oder rechte maustaste gedrückt ist Allgemeine Java-Themen 5
H args abfrage vereinfachen Allgemeine Java-Themen 7
P Tastatur abfrage ohne KeyListener Allgemeine Java-Themen 3
E Methoden Server Benutzer abfrage Allgemeine Java-Themen 2
D Internet Abfrage aber mit Warteschleife Allgemeine Java-Themen 6
R JNI if abfrage gibt immer false zurück. Allgemeine Java-Themen 7
S if-Abfrage Allgemeine Java-Themen 5
T Wiederholte Abfrage? Allgemeine Java-Themen 5
B abfrage ob file ausgeführt wurde Allgemeine Java-Themen 4
Z Boolean Abfrage gibt kein Boolean zurück, aber warum? Allgemeine Java-Themen 6
P Google Abfrage auslesen Allgemeine Java-Themen 2
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
W ICQ Status Abfrage mit Java Allgemeine Java-Themen 3
M if - else Abfrage beenden Allgemeine Java-Themen 4
MQue if- Abfrage Allgemeine Java-Themen 4
B Abfrage ob JRE installiert ist, JAR automatisch starten Allgemeine Java-Themen 5
MQue if Abfrage Allgemeine Java-Themen 27
MQue if- Abfrage Allgemeine Java-Themen 26
C Versionsstring Abfrage Allgemeine Java-Themen 7
G Tastatur abfrage Allgemeine Java-Themen 8
D Doppeltverschachtelte if-Abfrage Allgemeine Java-Themen 10
Z mit java htaccess - abfrage bestätigen/umgehen Allgemeine Java-Themen 2
U if Abfrage macht etwas falsch Allgemeine Java-Themen 2
G Problem mit if-Abfrage bei Benutzeingabe Allgemeine Java-Themen 2
P Java Acces Datenbank Problem ! (Brauche eine Abfrage) Allgemeine Java-Themen 5
K Abfrage ob JRE oder JDK auf System installiert ist. Allgemeine Java-Themen 12
T IF Abfrage + YES_NO Option mittels JOptionPane Allgemeine Java-Themen 3
U IF-Abfrage Allgemeine Java-Themen 17
H Java-Abfrage Allgemeine Java-Themen 9
A FileChooser Datei-Überschreiben Abfrage Allgemeine Java-Themen 2
F Java Passwort abfrage Allgemeine Java-Themen 2
S CDDB-Abfrage mit Java unter Linux? Allgemeine Java-Themen 4
L Datenbank Abfrage (Felder&Tabelle nicht fix) in ArrayLis Allgemeine Java-Themen 4
S Integer-splitten für Abfrage. Allgemeine Java-Themen 4
G Abfrage in datenbank Allgemeine Java-Themen 5
W Updates - wie am Besten verteilten? Allgemeine Java-Themen 9
Meeresgott Input/Output Polling mit (Action)-Listenern? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben