Event Handling Vom ActionEvent zum Parent-Namen

Moin Moin,

ich versuche gerade von einem ActionEvent über getSource() -> getParent() -> getName()
einen Switch zu bauen. Und zwar hab ich ein JTabbedPane, auf jedem Panel im TabbedPane sind Buttons drauf, ich will im ersten Moment gucken auf welchem Panel der Button sitzt und dann das ganze weiterleiten, an eine andere Operation/Klasse.

folgendes probiert und natürlich falsch *lach*
Code:
  public void actionPerformed(ActionEvent ae) {
     switch (ae.getSource().getParent().getName())
     {
       case "Programme":
         prog.starteProgramm(ae.getActionCommand());
         break;
       case "Dokumente":
         doc.oeffneDatei(ae.getActionCommand())
         break;
       case "Platzhalter":
         break;
     }
}
Zur Erklärung JButton = getSource(), JPanel = getParent(), "Programme/Dokumente" = getName()
prog und doc sind Objekte die auf eigenen geschrieben Klassen basieren.
 
Mh ich versteh die Frage nicht genau bzw. weiß nicht wie du das meinst.
Ich habe einen ActionListener, der die ActionEvents von allen Buttons bekommt und diese quasi "sortieren" soll. Ich gehe normalerweise über "getActionCommand()" und sortiere danach, aber jetzt will ich das ganze ein wenig weiter "sortieren" und das an weiter ausführende Klassen übergeben.
 

Thallius

Top Contributor
mit getSource() bekommst du doch die Adresse Deines Buttons. Was willst du da noch sortieren? Einfach

Code:
if(e.getSource() == myButton)
   doFunctionWhateverThisButtonShouldDo();
 
Ja das ich da den Button bekomme ist mir klar, ich will aber wissen auf welchem Panel der Button drauf ist.
Ich habe 3 Panels in einem TabbedPane, jedes Panel hat 3 Buttons, ich möchte über das ActionEvent wissen ob der Button auf Panel 1, 2 oder 3 bzw. wie der name des jeweiligen Panels ist.
 

VfL_Freak

Top Contributor
Moin,

jetzt dumm gefragt:
(a) du hast genau drei Panel??
(b) du hast jeweils genau drei Button??
(c) ergo: neun unterschliedliche Button insgesamt??
(d) kann ein Button auch zweimal vorkommen??
(e) da du oben von "getActionCommand()" sprichst: hat jeder der Button ein eigenes ActionCommand gesetzt??

Gruß Klaus
 
Moin,

jetzt dumm gefragt:
(a) du hast genau drei Panel??
(b) du hast jeweils genau drei Button??
(c) ergo: neun unterschliedliche Button insgesamt??
(d) kann ein Button auch zweimal vorkommen??
(e) da du oben von "getActionCommand()" sprichst: hat jeder der Button ein eigenes ActionCommand gesetzt??

Gruß Klaus

a) nein es sind bisher 3 Panels, ob es noch mehr werden ist unsicher.
b) nein das ist variabel, je nachdem was später hinzugefügt wird (Wieviele Programme, Dokumente und andere Dinge vom Programm aus gestartet bzw. geöffnet werden sollen)
c) ergo... siehe b :D variabel, das war nur eine Beispielmenge.
d) nein keine doppelten Buttons
e) klingt vllt nach Amateur, da mir "getActionCommand()" die Beschriftung des Buttons ausgibt, nutze ich diese zum Vergleich im Switch. Ich hab bisher nie darüber nachgedacht ein eigenes ActionCommand zu setzen.

PS: Ich bin auch für Tipps offen, wie man damit in der Regel umgeht, da ich neu bis ganz neu dabei bin.
Ich mache das im Rahmen eines Projektes in meiner Ausbildung und bring mir das meiste eigentlich selbst bei.
 
Du hast die Button doch auf die Panel gesetzt. Dann wirst du doch wohl auch wissen welcher Button auf welchem Panel ist?

Ja das weiß ich, ich könnte auch direkt über das ActionCommand gehen, aber ich würde das gern anders sortieren, damit mein "Listener" nicht die arbeit macht, sondern nur "weiterleitet". Ich versuche nämlich das MVC-Paradigma umzusetzen, mein Listener ist das Control und soweit ich das verstanden habe, ist der Control nur der "ich gebe das Weiter"-Typ zwischen dem View und dem Model und letzteres macht quasi die ganze Arbeit, während das View alles "zeigt" ;)
 

Thallius

Top Contributor
Falsch. Der Controller macht die Ganze Arbeit. Das Model macht überhaupt nichts ausser Daten zu halten. Dein ActionListener ist auch kein Teil des Controllers sondern er gehört zum View und er macht genau das was er soll, nämlich dem Controller mitteilen was er tun soll wenn ein bestimmer Button gedrückt wird.

Gruß

Claus
 
Falsch. Der Controller macht die Ganze Arbeit. Das Model macht überhaupt nichts ausser Daten zu halten. Dein ActionListener ist auch kein Teil des Controllers sondern er gehört zum View und er macht genau das was er soll, nämlich dem Controller mitteilen was er tun soll wenn ein bestimmer Button gedrückt wird.

Gruß

Claus

Ok dann weiß ich shcon mal eine Sache *grins*

Mein Control ist jetzt aber quasi ein ActionListener, er ist als sich selbst an das View übergeben und wird da als Listener an die Buttons gehängt.

Müsste ich jetzt (MVC bedingt) einen ActionListener im View-Package als Extraklasse erstellen und im in meinem Frame (bzw. JDialog) einbinden?
 

Thallius

Top Contributor
Ich würde das anders lösen. Der ActionListener kommt in den View. Ob du da jetzt eine Methode machst und mit getSource() alle Buttons abfragst oder ob du bei jedem Button einen ActionListener per inLine schreibst ist dabei relativ schnuppe. Jetzt hast du zwei Möglichkeiten.

1) Du weißt, dass Inhalte und/oder Änderungen in diesem View niemals jemand anderes interessiert als Deinen Controller. Dann kannt Du den "einfachen" Weg gehen und dem View eine Referenz auf Deinen Controller mitgeben und im ActionListener jeweils die passende Function im Controller aufrufen. Ist aber eher die unschönere Methode für schreibfaule.
2) Du erstellst ein Interface und machst den Controller zum Listener des View. Im Interface definierst Du dann alle Methoden die das View auslösen kann und der Controller verarbeitet diese dann entsprechend.

Gruß

Claus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
G eigenes Actionevent Allgemeine Java-Themen 8
J Problem mit ActionEvent / JMenu Allgemeine Java-Themen 4
I ActionEvent Allgemeine Java-Themen 8
N while Schlauf und ActionEvent Allgemeine Java-Themen 2
P Name der Parent Klasse abfragen Allgemeine Java-Themen 8
P Designproblem bei Parent/Children-Beziehungen von Klassen Allgemeine Java-Themen 6
M aus einer Unterklasse auf den parent zugreifen Allgemeine Java-Themen 2
PCOmega137 Objekten zufällig erzeugte Namen geben Allgemeine Java-Themen 2
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
A Mithilfe von einer Nummer einen Namen finden n-Beziehung Allgemeine Java-Themen 8
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
F Namen des Interfaces ausgeben Allgemeine Java-Themen 1
C Namen-Begrüßung Kommandozeilenparameter Allgemeine Java-Themen 8
K Labels mit Namen ansprechen Allgemeine Java-Themen 3
G Jar-File soll eignen *.jar Namen ausgeben Allgemeine Java-Themen 10
T Methoden per String-Namen aufrufen Allgemeine Java-Themen 2
E Prüfen ob Fenster mit Namen offen ist Allgemeine Java-Themen 2
M Festplatte am Namen erkennen Allgemeine Java-Themen 2
T Wie in abstrakter Klasse den namen der implementierenden Klasse rausfinden? Allgemeine Java-Themen 5
U Namen von Klassen haben $-Zeichen Allgemeine Java-Themen 5
U auf Objekte mit variablem Namen zugreifen Allgemeine Java-Themen 4
F Klasse ohne voll qualifizierenden Namen laden Allgemeine Java-Themen 5
V Dateien mit &-Zeichen im Namen öffnen Allgemeine Java-Themen 13
H2SO3- jar soll eigenen namen(pfad) finden Allgemeine Java-Themen 12
F deutsche namen für verben/substantive für Methoden/Klassen Allgemeine Java-Themen 10
C ArrayList mit Variable im Namen Allgemeine Java-Themen 16
V Class Mapping - Klasse unter anderem Namen verfügbar machen Allgemeine Java-Themen 8
J Zugriff auf den Namen einer Variablen Allgemeine Java-Themen 7
F Wie erfahre ich dynamisch den namen eines aktuellen Objektes Allgemeine Java-Themen 2
C dynamische variablen Namen! Allgemeine Java-Themen 4
K Funktion unabhängig vom Namen aufrufen Allgemeine Java-Themen 5
G Namen von Dateien von der CD auslesen Allgemeine Java-Themen 5
E Namen Vergleichen Allgemeine Java-Themen 6
S Den Namen eines gemounteten Shares rausbekommen Allgemeine Java-Themen 2
R Namen von Konstanten mit Strings vergleichen Allgemeine Java-Themen 7
I $ zeichen im class-namen Allgemeine Java-Themen 4
B Namen eines Objekts generieren? Allgemeine Java-Themen 4
S Lesen der eingerichteten ODBC DSN Namen Allgemeine Java-Themen 8
T Klassen mit gleichem Namen neu laden Allgemeine Java-Themen 7
M java klassen beerben u. den gleichen namen verwenden?(Naming Allgemeine Java-Themen 6
C kann man dynamische variablen namen vergeben? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben