Anzeige

 Erledigt: Java selbst erstellte Button-Klasse (Canvas) ActionListener


#1
Hallo, liebe Community,

ich schreibe an einem TicTacToe-Spiel, für welches ich mit Canvas eigene Buttons erstellt habe.
Den Buttons weiße ich einen ActionListener zu, der aber nicht aufgerufen wird.
Hier mein Code:

// in der GUI-Klasse
class GUI extends Frame implements ActionListener{

static MyButton[][] felder = new MyButton[3][3];

// Aufruf der Buttons
for (int i = 0; i <= 2; i++) {
panels = new Panel();
for (int x = 0; x <= 2; x++) {
felder[x] = new MyButton(this);
panels.add(felder[x]);
}

// MyButton-Klasse:
public class MyButton extends Canvas {

ActionListener al;

public MyButton(ActionListener al){
super();
setSize();

this.al = AWTEventMulticaster.add(this.al,al);
}

public boolean handleEvent(Event e) {

if (e.id == Event.MOUSE_ENTER) {
selected = true;
actualImage = imageSelected;
repaint();
return true;
}
if (e.id == Event.MOUSE_EXIT) {
selected = false;
if (actualImage == imageSelected) {
actualImage = image;
repaint();
}
return true;
}
return super.handleEvent(e);
}


Damit, dass die handle-Methode zusätzlich drin ist, hats wohl eher nicht zu tun? Schließlich haben das auch normale Buttons, und man kann den ActionListener zusätzlich addieren?
Hat es vielleicht damit zu tun, dass die Buttons in der GUI static sind? Ich habe das wegen einer weiteren Klasse gemacht wo ich Code ausgelagert hatte, der z. B. das Bild des jeweiligen Buttons holen sollte.

Schönen Tag
JavaSpielLoverFeminine
 
#2
Erledigt!

Habe es so gelöst: Habe die Buttons in der GUI-Klasse wieder non-static gemacht und eine Klasse Schnittstelle aufgemacht. Dort habe ich das statische Array MyButtons[] felder erstellt, welches ich im ActionListener initialisiere. Den Aufruf des ActionListeners in der MyButton-Klasse habe ich so gemacht:

//ganz oben in der Klasse
ActionListener actionListener;

// in der handleEvent-Methode:
actionListener.actionPerformed(new ActionEvent(this,ActionEvent.ACTION_PERFORMED,""));
Und es klappt super!
 
Anzeige

Neue Beiträge

Anzeige