JButtons - es wird beim falschen Button die Hintergrundfarbe angepasst

Hallo Freunde,
ich bins wieder und schwer in Not mit meinem Projekt "Schiffe versenken".

Könnt ihr mir vielleicht folgendes Phänomen erklären!

Ich habe zwei Matrizen aus JButtons gebastelt mit jeweils eigenen JPanels.
Links die Matrix für den Spieler und rechts die Matrix für den Computergegner.
Im Hintergrund habe ich zwei boolean Arrays, die die gesetzen Schiffe mit "protokolieren".

Soweit so gut. Spieler kann seine Schiffe setzen und der Computer setzt auch seine Schiffe auf sein Boolean Array.

Auf die Buttons des Spielers und der Computers habe ich ActionListener gesetzt, damit ich merke wann man einen Knopf drückt.

Nun ist es so, das ich das ganze Ding mal zwischenzeitlich testen wollte um zu sehen ob es auch hinhaut.
Mein Ziel ist es, zu sehen, ob ich die Schiffe des Computers auf seiner Matrix finden, wenn ich auf die auf seine Buttons drücke. Es sollte so sein, dass die Buttons auf der Computer Matrix, je nachdem, ob getroffen wurde oder nicht, die Hintergrundfarbe anpassen sollen.

Naja, das tun sie nicht. Stattdessen werden die Hintergrundfarben meiner Spielermatrix angepasst????????????? 😱

Könnt ihr mir helfen, raus zufinden, woran das liegen könnte!!

Anbei der Code:
Hier prüfe ich die Schiffe die der Spieler gesetzt hat.
Java:
			btnNewButton_x.addActionListener(new ActionListener() {
				// neuer ActionListener für die Button --> überprüft ob in der
				// Array ein Eintrag vorhanden ist
				final Component c = panel.getComponent(buttonNo);

				public void actionPerformed(ActionEvent e) {
					// TODO Auto-generated method stub
					int y = buttonNo / 10;
					int x = buttonNo - (y * 10);

					if ((field.getField_frei(x, y) == true)
							) {
						c.setBackground(Color.green);
					} else {
						// c.setBackground(Color.black);
					}
				}

			});
Hier prüfe ich die Schiffe die der Computer gesetzt hat.
Java:
// ======== Buttons für die Schiffe des Gegners =========
		for (int y = 0; y <= 99; y++) {
			final JButton btnNewButton2_y = new JButton("");
			final int buttonNo2 = y;
			System.out.println(btnNewButton2_y);
			panel_1.add(btnNewButton2_y);
			btnNewButton2_y.addActionListener(new ActionListener() {
				final Component c2 = panel.getComponent(buttonNo2);
				public void actionPerformed(ActionEvent e) {
					int y = buttonNo2 / 10;
					int x = buttonNo2 - (y * 10);
					
					if (field_gegner.getField_frei_gegner(x,y) == true){
						c2.setBackground(Color.red);
					} else {
						 c2.setBackground(Color.cyan);
					}
					
				}
			});
		}

Könnt ihr mit bitte helfen. Bin schon beim Verzweifeln.

Großes DANKESCHÖN an alle die mir weiterhelfen können oder es versuchen :applaus:

LG

Adriano Celentano
 
Nur überflogen, aber sollte die
final Component c2 bzw. c
die du dir da holst nicht immer genau der Button sein? Warum verwendest du statt c/c2 nicht direkt den btnNewButton2_y bzw. btnNewButton_x (gräßliche Namen...) ?
 
Danke für den Hinweis. Naja, manchmal sieht man den Wald vor lauter Bäume nicht.
So funktioniert es!

Was die Bezeichnungen angeht. Das es sich nicht um die Finale Version handelt, habe ich weniger auf die Bezeichnungen geachtet.
 

Neue Themen


Zurück
Oben