Swing - Aktionen wiederverwenden

Migu

Mitglied
Hallo

ich habe folgendes Problem bzw. Frage bei Swingapplikationen.
Sagen wir mal ich habe eine Applikation mit eine Menüleiste, eine Toolbar und verschiedene Panels.

So nun möchte ich zB. ein Aktion implementieren die über die Menüleiste, Toolbar und zB über ein PopUp in den Panels aufgerufen werden kann.
Mein Problem besteht darin sowas zu implementieren, also was für eine Strategie/Technik bei so einem Fall angewendet wird.
Was benutzt ihr für Techniken?

Was mich durcheinander bringt ist das die Logik der Aktion immer verschieden sein kann, je nachdem auf welches Element es aufgerufen bzw angewandt wird.
Deshalb dachte ich mir die Aktion als abstrakte Klasse zu definieren und dann die entsprechende Logikmethode zu überschreiben.

Nur weiss ich nicht wirklich wie...
Wäre über HIlfe dankbar.

Danke schon mal im Vorraus
 
Zuletzt bearbeitet:

Migu

Mitglied
Danke für die Antwort!
Aber die standard Swing methode (von AbstractAction abzuleiten und actionPerformed zu überschrieben) ist doch schon ein Command Pattern.

Ich verstehe irgendwie trotzdem nicht wie man die unterschiedliche Logik implementiert...
Muss man für jedes Auftreten der Action eine eigene Implementierung und somit ein neues Objekt erzeugen?
Also zB wenn man eine "changeLanguage" Action hätte würde man für zwei verschiedene Panels jeweils eine eigene Implementierung haben (zwei neue Objekte)?
 

kaoZ

Top Contributor
Ich verstehe nicht warum eine Action ( welche du als Klasse von AbstractAction ableitest) mehrere implementierungen haben sollte.

Wenn du eine Action definierst welche sich um das Schließen eines Frames kümmert, dann kannst du diese Action einfach einem JMenuItem und oder auch einem JButton in z.B einer JToolBar zuweisen,
trotzdem kümmert sich dann diese Action nur um das Schließen des Frames, die Anzahl an Klassen steigt somit ( unter verwendung des pattern, werlches auch der Nachteil ist ) parallel zu den erforderlichen / gewünschten Actions.

Ausweg / Alternative wäre Observer Pattern welches eine Weiterentwicklung der Command Patterns ist.

aber du hast recht damit das wenn deine Gui keine Referenz auf die jeweilige Action hält du immer an besagter stelle eine Instanz erzeugen musst.

z.B

Java:
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JTabbedPane;
import editor.enums.FileMenu;
import editor.gui.Gui;


@SuppressWarnings("serial")
public class CloseAction extends AbstractAction{

	private Gui gui;
	
	public CloseAction(Gui gui){
		super(FileMenu.CLOSE.value());
		this.gui = gui;
	}
	
	@Override
	public void actionPerformed(ActionEvent e){
		JTabbedPane tab = gui.getWorkBench().getTabbedPane();
		gui.removeTab((JComponent)tab.getSelectedComponent());
	}
}

könnte man dann hier (JMenu)

Java:
JMenuItem close = new JMenuItem(new CloseAction(gui));

oder auch einfach hier einsetzen (JToolBar)

Java:
JButton close = new JButton(new CloseAction(gui));
 
Zuletzt bearbeitet:

Migu

Mitglied
Danke für den Codeschnipsel.
In deinem Fall ist die action global, also die Logik ist immer gleich egal wo diese Action aufgerufen wird (Button oder Toolbar)

Aber was ist zB wenn man zwei Panels hat und eine Action "changeElementsColorAction" die die Farbe der Element in dem jeweiligen Panels ändert soll in einem PopUp (pro panel) verfügbar sein.
Wenn die Panels verschiedene Elemente haben dann muss die Logik der Action auch verschieden sein oder nicht?
Ansonsten könnte man ja die verschiedenen Elementen nicht ansprechen.
Man müsste dann eine neue "changeElementsColorAction" pro Panel definieren (evtl als inner class) und jeweils ein eigenes Action object.
 
Zuletzt bearbeitet:

JavaMeister

Gesperrter Benutzer
Ja aber dann ist das nicht die gleiche Action.

Wenn ich eine Action habe, die das FENSTER blau macht und eine andere Action, die ein Panel Schwarz macht, dann sind das verschiedene Actions.

Es sei den die beiden zu ändernden Panels implenmentieren changeColor(Color r) z.B. von einem Interface, dann hast du nur eine Action aber dennoch zwei Implementierungen.

Also ich verstehe das Problem hier nicht ganz.
 

kaoZ

Top Contributor
Du übergibst der Action einfach eine Referenz auf den panel, dessen Elemente Du ändern möchtest, und bietest im panel entweder eine dementsprechende Methode an und delegierst an die Elemente selbst, oder holst dir in der Action per getter die Element und wendest darüber dann beliebige Aktionen an.

Ersteres halte ich für die schönere Lösung.

Falls ich dich richtig verstehe :)
 
Zuletzt bearbeitet:

ssoul26

Bekanntes Mitglied
JavaMeister hat Recht. Definiere ein Interface und implementiere es für deine jeweiligen Panels. Am besten ein MasterPanel der eine Basisimplementierung der Interface-Methoden hat. Dann leitest du deinen speziellen Panels von diesem ab und überschreibst bei Bedarf die Action-Methoden. Da die ActionLogik sich nach dem Panel richten soll, ist dies besser als 20 verschiedene ActionMethoden zu entwickeln.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W SWING - Aktionen in Toolbar hinzufügen AWT, Swing, JavaFX & SWT 2
XWing Jave swing overly benutzten. AWT, Swing, JavaFX & SWT 3
J Anzeige ID und Markierung für Knoten in Eclipse & Swing AWT, Swing, JavaFX & SWT 4
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
A Eclipse 2023 und Swing AWT, Swing, JavaFX & SWT 4
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
ExceptionOfExpectation Anpassung von JKomponentengrößen (Swing) AWT, Swing, JavaFX & SWT 3
thor_norsk AWT SWING Aufgabe AWT, Swing, JavaFX & SWT 7
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
Monokuma Swing zu JavaFX AWT, Swing, JavaFX & SWT 5
J Swing Slider AWT, Swing, JavaFX & SWT 11
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
M Feldvalidierung swing AWT, Swing, JavaFX & SWT 4
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
O Zukunft von Swing und JavaFX ? AWT, Swing, JavaFX & SWT 3
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Swing GUI mittels erben sowie variabler Dateninhalt AWT, Swing, JavaFX & SWT 1
W Swing Multitouch mit Swing AWT, Swing, JavaFX & SWT 6
S Swing-Applikation die ein Numpad nachbildet samt Keybindings..? AWT, Swing, JavaFX & SWT 5
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
J Swing oder JavaFX AWT, Swing, JavaFX & SWT 21
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
B JavaFX oder swing AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
F main-Funktion bei Swing AWT, Swing, JavaFX & SWT 4
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
K eigener button in swing AWT, Swing, JavaFX & SWT 3
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
windl Bufferstrategy in Swing nachstellen AWT, Swing, JavaFX & SWT 0
M Kamera in Java Swing einbinden AWT, Swing, JavaFX & SWT 4
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
RalleYTN Swing JavaFX VideoPlayer in Swing einbetten. Ich komm nicht an die Dimension des Videos! AWT, Swing, JavaFX & SWT 0
T swing läuft nur beding flüssig AWT, Swing, JavaFX & SWT 1
A Sonderzeichen bei Swing AWT, Swing, JavaFX & SWT 3
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
N JavaFX Umstieg von Swing auf Java FX AWT, Swing, JavaFX & SWT 6
J GUI Anfänger einfaches Program AWT, Swing, JavaFX & SWT AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Plugin oder eigenes Tool mit zB SWING AWT, Swing, JavaFX & SWT 2
Z Java-Swing : JComponent AWT, Swing, JavaFX & SWT 2
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
T Swing Kompatibilitätsproblem zwischen Swing und JavaFX AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben