Swing Bei einem 2-dimensionalen array, bei mouseClicked index zuordnen

wichtelmann

Neues Mitglied
Hallo.
ich schreibe seit längerem an einer GUI für ein Kartenspiel. Die GUI sieht auch ganz passabel aus und leistet eigentlich auch was sie soll.
Das einzige was fehlt ist ein HumanPlayer. Dabei bin ich allerdings auf folgendes Problem gestoßen:
Wie kann ich den Index, der im MouseListener der Labels herausbekommen wird, später einem Zug zuweisen?

Die Züge werden in folgender Form konstruiert: Move(x-Index,y-Index,Value), wobei es mir erst einmal um den x und y Index geht. Dazu habe ich auch schon folgenden MouseListener geschrieben:

Java:
for (int y = 0; y < 5; y++) {
			for (int x = 0; x < 5; x++) {
		jLabelField[x][y].addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(final MouseEvent evt){
				final JLabel source = (JLabel)evt.getSource();
				int xValue;
				int yValue;
				for (int y = 0; y < 5; y++) {
					for (int x = 0; x < 5; x++) {
						if(source==jLabelField[x][y]){
							xValue=x;
							yValue=y; 
							Coordinates coo = new Coordinates(x,y); //Typ, der aus einem x-Wert und einem y-Wert besteht
						}
					}
			}
		}});

Ich will jetzt quasi entweder xValue und yValue oder die Variable coo so extrahieren, dass ich später mit diesen Werten
Java:
Move m = new Move(xValue,yValue,Value)
oder so ähnlich erzeugen kann, den ich dann wieder für das fortschreiten des Spiels, Nutzen kann.
Kann es auf diese Weise funktionieren, oder muss eventuell auch ganz anders an die Sache herangegangen werden?
Ich würde mich auf eine baldige Antwort freuen.
wichtelmann

PS: Ich hoffe ich bin im richtigen Bereich gelandet, mit diesem allgemeinprogrammtechnischen Swing-Problem😀
 
Wenn ich dich richtig verstanden habe, musst du die Position ja nur als Klassenvariable abspeichern?
btw. für Koordinaten gibt es schon die vordefinierte Klasse Point.
 
Wenn ich folgendes konstrukt habe.

Java:
p1= new HumanPlayer();
p2= new AlphaBetaPlayer()

while (!(state.isEndState())) {
					if (state.isRowPlayerActive()) {
						m= new Move(xValue,yValue,0);//Um diesen Move geht es hier!!
//Hier soll auf die menschliche Eingabe gewartet werden
					}

					else {
						m = p2.nextMove(state);//Zug wird automatisch von der KI generiert
					}
				
					nextState = state.performMove(m);
					previousState = state;
					state = nextState;
					scalePictures();
					ImgToLabel(state);

will ich ja jeden Zug wieder neue Werte haben und ich will eig, dass er jedesmal auf das Element wartet, also, dass er jedes mal einen Zug bekommt, sich der aber immer wieder unterscheidet. Gibt es da eine Funktion, mit der man in diesem Falle auf das Event "warten" könnte? und reicht es die Variable jedes mal neu zu initialisieren, oder sollte man eventuell den MouseListener nur für diesen Zeitraum einführen?

PS: Danke für die schnelle Antwort
 

Zurück
Oben