Arbeiten mit actionPerformed(ActionEvent) oder Alternative

maximilian1

Mitglied
Hallo,
ich schreibe gerade an einem Programm, welche viele Elemente in einer ArrayList liegen hat. in diesen Elemente sind verschiedene Strings, ints, usw. abgelegt. All diese Elemente werden übersichtlich in einem Kalender (Monatsansicht) dargestellt, zäsätlich bekommt jedes Element in der Monatsansicht einen JButton um es zu "öffen". Beim Öffenen sollen die einzelnen Strings, ints, usw. in über JLabels ausgegeben werden. Das ist auch soweit schon alles fertig, bis auf die Funktion des Buttons. Ich hatte zunächst immer mit .setActionCommand("blabla") gearbeitet, doch dies ist bei der Großen Menge an Daten sehr unpraktisch.

Kurz zusammengefasst, Elemente aus einer ArrayList sollen mit einem JButton verknüpft werden. Wird dieser Button gedrückt soll das Element, das diesem Button zugeordnet wurde angezeigt/geöffnet werden.

wie mache ich das am geschicktesten?
 
doch dies ist bei der Großen Menge an Daten sehr unpraktisch.

Was meinst Du mit "unpraktisch"? Der erste Ansatz wäre doch folgender:

1. ActionListener erstellen
2. Jedem Button diesen ActionListener hinzufügen
3. In der actionPerformed() Methode des ActionListeners prüfen, welcher Button ausgelöst hat und dann die entsprechende Methode zur anzeige aufrufen.

Das erfordert ebi vielen Buttons natürlich eine Abfrage jedes Buttons.

Du könntest natürlich auf den JButton überschreiben und eine Referenz auf das anzuzeigende Element in Deinem jeweiligen Objekt deiner CustomButton Klasse speichern. Die actionPerformed Methode bräuchte dann keine Unterscheidung, da immer auf die jeweils gespeicherte Referenz zugegriffen wird.
 
3. In der actionPerformed() Methode des ActionListeners prüfen, welcher Button ausgelöst hat und dann die entsprechende Methode zur anzeige aufrufen.

Überprüfe ich bei diesem Weg die Caption (Beschriftung) des Buttons oder gibt es hier auch eine andere Möglichkeit?

Java:
	public void actionPerformed(ActionEvent e) {
				System.out.print(((JButton)e.getSource()).getText());
	}
 
Du könntest natürlich auf den JButton überschreiben und eine Referenz auf das anzuzeigende Element in Deinem jeweiligen Objekt deiner CustomButton Klasse speichern. Die actionPerformed Methode bräuchte dann keine Unterscheidung, da immer auf die jeweils gespeicherte Referenz zugegriffen wird.

Dazu muss man nichts überschreiben. Für solche Dinge kann man JComponent#getClientProperty/putClientProperty nutzen.
 
Überprüfe ich bei diesem Weg die Caption (Beschriftung) des Buttons oder gibt es hier auch eine andere Möglichkeit?

Java:
	public void actionPerformed(ActionEvent e) {
				System.out.print(((JButton)e.getSource()).getText());
	}

Nein, den der Text kann sich ja bei mehrsprachigen Anwendungen ändern. Für diesen Zweck gibt es setActionCommand/getActionCommand
 
erstmal danke für die vielen Antworten 🙂.
Also ich kenne nur die Lösung mit dem ActionCommand. Da sich die Elemente aber im Wesentlichen durch das Datum unterscheiden (Datum währe dann das ActionCommand) müsste ich in der ActionPerformed Methode ja alle Daten abfragen, da aber regelmäßig neue dazu kommen müsste ich das dann ja immer aktualisieren. Es währe toll wenn ich irgentwie mit dem Buttondrücken gleich ne Referenz auf das Element mitliefern könnte.
 

Neue Themen


Zurück
Oben