Java Frage zu JButton und Events

r@b!ttbr@!n

Cadet 3rd Year
Registriert
Dez. 2007
Beiträge
39
Moin,

Wir haben in der Schule vor kurzem mit Oberflächen und Events begonnen und ich möchte
nun ein kleines TicTacToe-Spiel programmiern.

Ich erstell die 9 JButtons. Alle sind mit "-" beschriftet und sollen nun bei Klick auf "x" bzw. "o"
umbenannt werden.

Nun mein Problem:
Wenn ein Button gedrückt wird, bekomm ich in dem ActionEvent nur die Beschriftung. Und die
ist ja bei allen gleich. Woher weiß ich jetzt also welchen Button ich umbenennen muss?
Gibt es da noch eine andere Möglichkeit außer das irgendwie über .getLocation() zu machen.

mfg
 
Ich würde ein String[8] Array machen mit "x" und "o" und dort dann die Werte speichern und auslesen. Es wird dann übersichtlicher und einfacher JButton(String text) eintzsetzen (text = String[Buttonnummer]).
 
Entweder du schreibst dir deine eigene JButton-Klasse (ist jetzt gar nicht so schwer, da du ja einfach alles erben kannst und dir einfach paar eigene Methoden+Variable hinzufügst, welche die ,Beschriftung' regeln) oder über einen StringArray. Button oben links ist dann auf dem Index 0 usw.

Dann weißt du ja, welcher Button gedrückt wurde, und liest im StringArray die Position aus.
 
Also entweder steh ich aufem Schlauch und ich versteh nicht was ihr meint oder ihr habt mein
Problem nicht ganz verstanden.

Falls ersteres zutreffen sollte bitte ich darum es ausführlicher zu erklären.
Falls es an meiner Problemstellung liegt, hier nochmal ausführlicher:
Ich hab das Problem, dass ich nicht weiß welcher Button gedrückt wurde. Wenn ein Button
gedrückt wird, dann wir ja ein ActionEvent-Objekt erstellt und die Methode actionPerformed()
aufgerufen. In dieser Methode kann ich dann mit .getActionCommand() die Beschriftung des
Buttons herrausfinden. Aber ich hab 9 Buttons mit der selben Beschirftung. Also woher weiß
ich ob es der Button in der mitte oder der Button rechts oben ist, der gedrückt wurde?
Ich hoffe ihr versteht jetzt was ich Meine
 
Was wir damit meinen ist das das du die "x" und "o" in Arrays verlagerst da du sonst den Status nicht auslesen kannst. Dazu der String Array, dann setzt du einfach den JButton Text mit dem Text. Dann brauchst du auch kein .getActionCommand() usw.
Also die Vorgehensweise:
- Du erstellst einen String-Array der ist leer
- die 9 JButtons die auf das Array zugreifen welche leer sind.
- ein Counter die zwischen "x" und "o" wechselt
- wenn "x" am Zug ist und einen Button anklickt wird x im Array (an Stelle 0 - 8) gespeichert und dann gleich wieder ausgelesen damit man weiß welches Zeichen sich dort gerade befindet

Hoffe ich habe es übersichtlich erklärt.
 
Sry, aber für mich gibt das immernoch kein Sinn.
Ich weiß ja immernoch nicht welcher Button gedrückt wurde, folglich auch nicht welche Stelle
ich im Array ändern muss oder steh ich grad so aufem Schlauch?:freak:

Mich interessiert nur, woher man weiß, welcher Button gedrückt wurde.
 
JButton hat die folgende Funktion
Code:
public void setText(String text)
Sets the button's text.
Damit setzt du einfach den Text im Button mit dem Text aus dem Array.
Also z.B. ist "X" an der reihe, dann machst du:
Code:
Button0 = new JButton ("-");
...
Button0.setText ("x");
Wobei Button0 dein Button oben links ist z.B. usw.
Dazu machst du Button0, Button1, ... , Button 8 für die 9 Buttons.
 
Zuletzt bearbeitet:
Du gibst den JButtons doch Namen?

Der Actionlistener reagiert ja in der Form(verkürzt/ausschnitthaft)

Code:
if(e.getSource == JButton_1)
           ..blubb...
if(e.getSource == JButton_2)
           ..blah...

Sollte dir eigentlich bekannt sein.. und jetzt kommt es .. du hast ja den JButtons unterschiedliche Namen gegeben, ... d.h. sie sind eindeutig.. du kannst denen nun eindeutige Positionen im Array zuweisen...

Beispielhaft mal ausgedrückt...!

Code:
if(e.getSource == JButton_1){
    if(StringArray[1] == "x"){
          StringArray[1] = "o"
    // so haben wir das x mit o überschrieben bei dem Jbutton.. !
    }
}
Könntest es auch anders regeln, auslagern, hashmaps etc.

ps:
e ist hier immer das Event vom ActionListener.
Und man sollte danach noch das Gui refreshen.
 
Du kannst entweder per JButton.setActionCommand für jeden Button eine Bezeichnung erstellen, die du dort abfragst. Oder per ActionEvent.getSource den Button, der das Event ausgelöst hat.
 
Aaaaaah.. jetzt ist mir alles klar..
Genau das mit .getSoucre() wollt ich wissen.
Im Unterricht haben wir immer nur mit .getActionCommand() gearbeitet und als ich meinen Lehrer gefragt hab, ob es noch eine andere Art gibt die Buttons voneinander zu unterscheiden bzw. ihnen Namen zu geben/anzufragen, hat er nein gesagt. (Unfähige Maschinenbauer :D )

Dann ist natürlich alles klar und die kurze Antwort von WingX hätte vollkommen gereicht um mein Problem zu lösen.

Danke für eure Hilfe. :)
 
Zurück
Oben