bin noch ganz neu was gui betrifft. Also vielleicht ist mein Problem einfach nur dumm.
Ich habe ein paar Fenster gebastelt und diese als Package 'gui' abgelegt.
Dann hab ich eine Client/Server-Application geschrieben.
Die klasse client soll mit 'implements ActionListener' deklariert werden.
Nach aufruf von 'java client server-ip'
öffnet der client das LoginWindow (eine klasse der gui).
Dann wollte ich die actionPerformed-methode im Client implementieren, welche zentral alle events aus allen Fenstern auffangen und auswerten soll.
Allerdings scheint das nicht zu funktionieren ...
Wenn ich in der klasse LoginWindows 'implements ActionListener' mache verlangt java, daß actionPerformed auch da überschrieben wird. Aber ich will die Auswertung doch in der Klasse client machen... und wenn ich andererseits die Klasse windows nicht 'implements ActionListener' mache, dann funktioniert myButton.addActionListener(this) nicht...
Hat jemand vielleicht Zeit und Muße und könnte mir ein kleines Beispiel zukommen lassen, wie man die actionPerformed Methode zentral von einer klasse für alle fenster aufführt, die in der GUI vorkommen ? Falls das überhaupt möglich ist..
Also: Ob es möglich ist, die events der GUI an EINER Stelle zu handhaben, ist zweitrangig, da man das einfach nicht tut. Du solltest Dir überlegen, was Deine GUI-Elemente tun und das sollten sie dann auch selbst tun (und nicht an einen zentralen Event-Handler weiterleiten). Also solltest Du Dir einfach mal über die zweckmäßige Aufteilung Deiner GUI-Komponent Gedanken machen.
Weiterhin lässt Deine Frage vermuten, dass Dir auch die objektorientierte Programmierung noch nicht so ganz an's Herz gewachsen ist. Natürlich kannst Du bei einer Methode
Code:
addActionListener(ActionListener listener)
nur Instanzen von ActionListener's übergeben. Und natürlich muss eine Klasse, die das Interface "ActionListener" implementiert auch alle ActionListener-Methoden implementieren.
Schau Dir doch nochmal die Benutzung des Wortes implements bzw. das Interface-Konzept in java an.
Grüße, Ebenius
Anbei: das Thema gehört eher zu den Anfängern, nicht böse sein. *Verschieb*
Du wirst schnell merken das das eine schlechte idee ist, alle events in einer klasse zu
verwalten. Fange die events in der klasse ab in der sie auch passieren.
aber es gibt da auch möglichkeiten mit threads...weil wenn ein event eintritt zb eine
datenbankabfage, und die lange dauert, ist deine swing-oberfläche in dieser zeit blockiert und
kann keine events verarbeiten. dazu gibt es aber lektüre.....
Zu den Interfaces wie Ebenius sagt: nochmal angucken!
danke für Eure Unterstützung und nein ich bin nicht böse, wenn mein Thread in den Noob-Bereich gesteckt wurde.
Ich hab inzwischen herausgefunden wie ich mein Ziel erreiche... es funktioniert.
Warum ich das machen will .. also ich programmier Java seit ca. 2 Monaten und ich finde einfach keine bessere Lösung.
Ich hab da meine Klasse SLClient, welche eine Instanz von sich selbst startet. Die Klassenvariablen beinhalten ServerIP/name und ServerPort, sowie DataIn- und DataOutputStream.
Zuerst hab ich versucht ActionListener in der Klasse LoginWindow zu implementieren. Allerdings mußte ich feststellen, die einzige (mir bisher bekannte) Möglichkeit, vom LoginWindow an den Server zu kommen ist, daß ich die Klassenvariablen des SLClients an den Konstruktor des LoginWindows übergebe.
Deine Vermutung betreffend, daß mir die objektorientiert Programmierung noch nicht so ganz ans Herz gewachsen ist, kann ich nur unterstreichen. Hab vor ca. 10 Jahren mal Ansi C gelernt und davor mit TurboPascal und Cobol gearbeitet.
Von all dem hab ich inzwischen fast alles vergessen.