mehrere Listener für einen Button / Label

Juergen-87

Mitglied
Hallo,

ich befasse mich zur Zeit mit der Umsetzung eines Kartenspiels. Dabei habe ich erstmal grundlegend zwei verschiedene Klassen (eine für Gui und eine für Spiel-Logik) und dann natürlich noch etliche Extra-Klassen für die verschiedenen Kartenstapel, Kartentypen und Sonderfunktionen.
Die Karten werden in der Gui in einer ArrayList<JComponent> gespeichert. Wenn die Karte eine Sonderfunktion hat wird ein Button erzeugt, der die Sonderfunktion auslöst und ansonsten einfach ein Label (jeweils mit Bild der Karte).
Bei einigen Sonderfunktionen muss dann eine bestimmte Karte ausgewählt werden (per Mausklick), auf die sich die Sonderfunktion bezieht. Das heißt, ich muss erst bei allen ausliegenden Karten den aktuellen ActionListener entfernen, dann einen neuen MouseListener hinzufügen und danach wieder alle ursprünglichen ActionListener herstellen. Gibt es dafür ein grundlegendes System, wie man an solche Probleme rangeht (also auf Buttons/Labels zu verschiedenen Zeitpunkten verschiedene Listener zu haben)?
Ich habe es wiefolgt umgesetzt:
Java:
public void guiFuerMauslistenerVorbereiten(){
		alleButtonsdeaktivieren();
		alleMouseListenerEntfernen();
	}
void alleButtonsdeaktivieren() {
		for(int i=0; i<kostenfreieKartenLabelArrayList.size();i++){
			if(kostenfreieKartenLabelArrayList.get(i) instanceof JButton){
				kostenfreieKartenLabelArrayList.get(i).setEnabled(false);
			}
		}
		for(int i=0; i<zusatzKartenLabelArrayList.size();i++){
			if(zusatzKartenLabelArrayList.get(i) instanceof JButton){
				zusatzKartenLabelArrayList.get(i).setEnabled(false);
			}
		}
	}

public void alleMouseListenerEntfernen(){
		for(int i = 0; i<(getKostenfreieKartenLabelArrayList().size());i++){
			MouseListener[] x = getKostenfreieKartenLabelArrayList().get(i).getMouseListeners();
			for(int j=0;j<x.length;j++){
				getKostenfreieKartenLabelArrayList().get(i).removeMouseListener(x[j]);
			}			
		}
		if (!getZusatzKartenLabelArrayList().isEmpty()){
			for(int i = 0; i<getZusatzKartenLabelArrayList().size();i++){
				MouseListener[] x = getZusatzKartenLabelArrayList().get(i).getMouseListeners();
				for(int j=0;j<x.length;j++){
					getZusatzKartenLabelArrayList().get(i).removeMouseListener(x[j]);
				}	
			}
		}
	}
	
	public void sonderfunktionListenerWiederherstellen(){
		for(int i=0; i<(getKostenfreieKartenLabelArrayList().size());i++){
			if(spiel.getKostenfreieKartenKarteArrayList().get(i).getSonderfunktion()!=null){
				((JButton) kostenfreieKartenLabelArrayList.get(i)).addActionListener(new SonderfunktionListener(this, spiel, spiel.getKostenfreieKartenKarteArrayList().get(i), ((JButton) kostenfreieKartenLabelArrayList.get(i))));
			}
		}
		if(!spiel.getZusatzKartenKarteArrayList().isEmpty()){
			for(int i=0; i<(getZusatzKartenLabelArrayList().size());i++){
				if(spiel.getZusatzKartenKarteArrayList().get(i).getSonderfunktion()!=null){
					((JButton) zusatzKartenLabelArrayList.get(i)).addActionListener(new SonderfunktionListener(this, spiel, spiel.getZusatzKartenKarteArrayList().get(i), ((JButton) zusatzKartenLabelArrayList.get(i))));
				}
			}
		}
	}
void ungenutzteSonderfunktionButtonsAktivieren(){
		for(int i=0; i<kostenfreieKartenLabelArrayList.size();i++){
			if(kostenfreieKartenLabelArrayList.get(i) instanceof JButton){
				if(!spiel.getKostenfreieKartenKarteArrayList().get(i).isFunktionGenutzt()){
					kostenfreieKartenLabelArrayList.get(i).setEnabled(true);
					kostenfreieKartenLabelArrayList.get(i).updateUI();
				}
			}
		}
		for(int i=0; i<zusatzKartenLabelArrayList.size();i++){
			if(zusatzKartenLabelArrayList.get(i) instanceof JButton){
				if(!spiel.getZusatzKartenKarteArrayList().get(i).isFunktionGenutzt()){
					zusatzKartenLabelArrayList.get(i).setEnabled(true);
					zusatzKartenLabelArrayList.get(i).updateUI();
				}
			}
		}
	}
Ich hoffe, ich hab allen relevanten Code dabei. Alles hochzuladen wird etwas kompliziert, da das Spiel schon ca. 50 Klassen hat.

Mein Problem liegt eben darin, dass das Wiederherstellen der ursprünglichen ActionListener nicht immer funktioniert und dabei manche nicht mehr aktiv sind.
 

Saheeda

Top Contributor
Mir ist noch nicht so ganz klar, warum du mehrere Listener auf einen Button legen willst. Für mich klingt es ziemlich schwer, das sauber zu koordinieren und zu debuggen.
Könntest du nicht z.B. mehrere Buttons nehmen und diese nach Bedarf ein- oder ausblenden?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Mehrere Klassen auf JFrame Spiele- und Multimedia-Programmierung 3
N Mehrere Rechtecke in großes Quadrat einzeichnen Spiele- und Multimedia-Programmierung 5
M Applets - mehrere Tasten gleichzeitig abfragen Spiele- und Multimedia-Programmierung 3
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
staxx6 (Slick) Steuerung - mehrere Belegungen Spiele- und Multimedia-Programmierung 12
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 5
R Mehrere Shader in einem Program Spiele- und Multimedia-Programmierung 8
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 2
S Ein Thread für alle Animationen oder mehrere? Spiele- und Multimedia-Programmierung 2
S Mehrere Steine gleichzeitig setzen und bewegen Spiele- und Multimedia-Programmierung 4
V Java3D: mehrere ViewingPlaforms in Sonnensystem Spiele- und Multimedia-Programmierung 8
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
hdi mehrere Threads/Tasks in einem synchronisieren -> TaskPoo Spiele- und Multimedia-Programmierung 36
S Java3D - mehrere Instanzen eines Geometrieobjektes erzeugen Spiele- und Multimedia-Programmierung 3
V Ein oder mehrere GIF-Grafiken zusammenfügen Spiele- und Multimedia-Programmierung 3
M mehrere PNG in eine Datei Spiele- und Multimedia-Programmierung 3
L Wie kann ich mehrere Texturen auf ein Object File mappen Spiele- und Multimedia-Programmierung 4
D mehrere Graphiken erstellen und ihre Position definieren Spiele- und Multimedia-Programmierung 4
G Minecraft PlayerBot (Listener Thread für jeden Spieler?) Spiele- und Multimedia-Programmierung 3
S Draw Package - Listener Schnittstellen Spiele- und Multimedia-Programmierung 2
C Midi abspielen und Listener anmelden? Spiele- und Multimedia-Programmierung 1
D Key Listener reagiert nicht ! Spiele- und Multimedia-Programmierung 4
F OpenGL 2D MouseClick/MouseMove Listener Spiele- und Multimedia-Programmierung 4
K Grafiken mit Listener verbinden? Spiele- und Multimedia-Programmierung 10
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
B Deepmind Poker Bot für PokerStars konfigurieren? Spiele- und Multimedia-Programmierung 2
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
E Organisation für Game Spiele- und Multimedia-Programmierung 1
Excess Ballerfisch für Android Spiele- und Multimedia-Programmierung 3
coolian ich brauche irgendeine gui lib für lwjgl2 Spiele- und Multimedia-Programmierung 51
krgewb Anderer Algorithmus für Bounding Box Spiele- und Multimedia-Programmierung 9
MiMa MP3 Dateien für Metadaten abgleichen Spiele- und Multimedia-Programmierung 0
Freshy Bot für Discord Spiele- und Multimedia-Programmierung 61
R Ideen für die Backend-Entwicklung eines Games gesucht Spiele- und Multimedia-Programmierung 8
G Mikrophon-/Audiosteuerung für einen Character Spiele- und Multimedia-Programmierung 1
P Tennis- Spielstand- Zähler für Schule programmieren Spiele- und Multimedia-Programmierung 6
M Logik für ein Quiz Spiele- und Multimedia-Programmierung 7
P Hilfe für Seminar Arbeit Spiele- und Multimedia-Programmierung 9
MiMa Metadaten für Multimedia Daten ermitteln Spiele- und Multimedia-Programmierung 4
G Übungsprogramm für Matheaufgaben Spiele- und Multimedia-Programmierung 1
F Algorithmus für bessere Kollisionsabfragen Spiele- und Multimedia-Programmierung 10
S Bilder Für Schachfiguren Spiele- und Multimedia-Programmierung 14
Timo_neu_in_java Suche etwas einfaches für Anfänger Spiele- und Multimedia-Programmierung 6
I Minecraft Suche Plugin Developer für Minecraft Netzwerk! Spiele- und Multimedia-Programmierung 2
S GUI erstellen für Text Adventure Spiele- und Multimedia-Programmierung 4
S Eigene Klasse vec_t - 3 oder 4 Einheiten für x, y, z und w Spiele- und Multimedia-Programmierung 11
R Vererbbarer GameLoop für Engine Spiele- und Multimedia-Programmierung 14
J Vektor für Gravitation erzeugen Spiele- und Multimedia-Programmierung 34
I Minecraft: Craftingrecipe für Braustand ändern Spiele- und Multimedia-Programmierung 9
Z Minimax-Algorithmus für TicTacToe Spiele- und Multimedia-Programmierung 5
H KI für Spiele Spiele- und Multimedia-Programmierung 1
S Pssende Datenstruktur für ein Netz Spiele- und Multimedia-Programmierung 5
S MouseEvents für Sprites Spiele- und Multimedia-Programmierung 3
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
C Port umleiten: lesen und schreiben für MCServer-Client über Skype Spiele- und Multimedia-Programmierung 0
J Musik Bibliothek für GUI Spiele- und Multimedia-Programmierung 7
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
R Ratschlag für 2D-3D Engine für die Spieleentwicklung gesucht Spiele- und Multimedia-Programmierung 4
Androbin KI für Verfolgung im Raster Spiele- und Multimedia-Programmierung 2
A Bot für Browsergame Spiele- und Multimedia-Programmierung 2
H Tutorials für Fortgeschrittene 3D-Anwedungen Spiele- und Multimedia-Programmierung 2
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
Furtano Vektoren für Bewegung für eine 2D-Simulation Spiele- und Multimedia-Programmierung 3
T Sinusgenerator für eine Hp Spiele- und Multimedia-Programmierung 8
J Menü für Snakespiel in einzelnem JFrame Spiele- und Multimedia-Programmierung 5
M Minecraft weitere Java Entwickler für minecraft projekt gesucht Spiele- und Multimedia-Programmierung 0
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
N Animationen für ein 2D game Spiele- und Multimedia-Programmierung 6
S Aufbau für 2D Spiele Spiele- und Multimedia-Programmierung 7
L Client für ein Browsergame Spiele- und Multimedia-Programmierung 21
Devil0s Swing Elemente für Inventar? Spiele- und Multimedia-Programmierung 9
Kenan89 Ansatzfrage: Kartenspiel für 2 Spieler Online Spiele- und Multimedia-Programmierung 3
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
P Spielfeld für RPG Spiele- und Multimedia-Programmierung 15
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
S Algorithmus zur Ressourcesuche für die KI Spiele- und Multimedia-Programmierung 5
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
K Einfache Engine für einfaches 3D gesucht Spiele- und Multimedia-Programmierung 10
C KI für Skatspiel - Wie können die Computerspieler eigenständig handeln? Spiele- und Multimedia-Programmierung 10
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
Kenan89 Kleines Projekt für Java Spiele- und Multimedia-Programmierung 5
M Empfehlungen für ein 2D-Jump'n'run Spiele- und Multimedia-Programmierung 4
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8
C Wo ist der MP3 Plugin für JMF? Spiele- und Multimedia-Programmierung 3
qwerqer Design Pattern gesucht für Spielregeln Spiele- und Multimedia-Programmierung 2
M Java als Programmiersprache für kommerzielle Spieleentwicklung? Spiele- und Multimedia-Programmierung 3
K Game Engine für selbstprogrammiertes Spiel Spiele- und Multimedia-Programmierung 27
Y Warum Thread für Spieleprogrammierung? Spiele- und Multimedia-Programmierung 27
A Music für Android game Spiele- und Multimedia-Programmierung 3
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
M Minecraft Suche Java Programmierer (für Minecraft) Spiele- und Multimedia-Programmierung 2
Luk10 Tipps für bessere Animationen / Grafik Engine Spiele- und Multimedia-Programmierung 2
T 2D Menü für 3D Spiel Spiele- und Multimedia-Programmierung 5
T Grundlagenwissen für den 3D Raum Spiele- und Multimedia-Programmierung 6
I getSubImage sorgt für starken Performanceeinbruch Spiele- und Multimedia-Programmierung 6
M technologie für video, webcam & co Spiele- und Multimedia-Programmierung 25
C Java für große Spiele geeignet ? Spiele- und Multimedia-Programmierung 101

Ähnliche Java Themen

Neue Themen


Oben