[Java] [GELÖST] erstellen von Listenern in for schleife

Übersicht Andere Programmiersprachen Allgemein

Neue Antwort erstellen

US-Blitz

ehemals "SimssmiS"

Betreff: [Java] [GELÖST] erstellen von Listenern in for schleife

BeitragMo, Apr 15, 2013 12:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,
mein Problem ist folgendes:

Ich erzeuge eine Reihe von Buttons, dessen Anzahl von einer Anzahl von Bildern in einem bestimmten Ordner hinterlegt sind abhängt.
Soweit so gut.
Problematisch wird es jedoch dann, wenn ich für genannte Buttons die Listener erzeugen will.

Code: [AUSKLAPPEN]

private void initListeners(){
      for (int i=0;i<tileB.length;i++){
         tileB[i].addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
               chosen=tileImages[i]; //<-------- i must be declared final
               System.out.println(chosen);
            }
            
         });
      }
   }

Ich möchte das die Buttons eine Variable gleich ihrer Position (1,2,3 usw. Button im Array) setzt.

Habt ihr eine Idee wie ich dies bewerkstelligen könnte?

Viele Grüße US_Blitz
  • Zuletzt bearbeitet von US-Blitz am Mo, Apr 15, 2013 21:20, insgesamt einmal bearbeitet

Addi

BeitragMo, Apr 15, 2013 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstelle eine Subklasse in der du den ActionListener implementierst und die entsprechende Methode überschreibst und bei addActionListener musst du dann den Konstruktor der Subklasse aufrufen.
In der überschriebenen Methode musst du natürlich noch überprüfen, welcher Button gedrückt wude und dann reagierst du dementsprechend drauf.
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62

US-Blitz

ehemals "SimssmiS"

BeitragMo, Apr 15, 2013 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok danke für die Hilfe.
Doch ich bin noch recht neu in diesem Bereich und habe das noch nicht genau verstanden.
Könntest du es mir vlt. noch einmal erklären?

Addi

BeitragMo, Apr 15, 2013 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Werde gleich mal ein Beispiel machen. Bin gerade aber nicht am Pc Wink
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62

DAK

BeitragMo, Apr 15, 2013 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
public class MyCoolActionListener implements ActionListener {
   int chosenI;
   public MyCoolActionListener(int chosenI) {
      this.chosenI = chosenI;
   }
   @Override
   public void actionPerformed(ActionEvent e) {
      chosen=tileImages[chosenI];
      System.out.println(chosen);
   }
}

//Verwendung:
private void initListeners(){
      for (int i=0;i<tileB.length;i++){
         tileB[i].addActionListener(new MyCoolActionListener(i));
   }


oder vielleicht gleich:

Code: [AUSKLAPPEN]
public class MyCoolActionListener implements ActionListener {
   Image chosen; //oder was auch immer für ein
   public MyCoolActionListener(Image chosen) {
      this.chosen = chosen;
   }
   @Override
   public void actionPerformed(ActionEvent e) {
      System.out.println(chosen);
   }
}

//Verwendung:
private void initListeners(){
      for (int i=0;i<tileB.length;i++){
         tileB[i].addActionListener(new MyCoolActionListener(tileImages[i]));
      }
   }


Und wenn ich mich nicht vertippt habe, dann sollte das so funktionieren. (Habs auch ohne IDE gemacht)
Gewinner der 6. und der 68. BlitzCodeCompo

Addi

BeitragMo, Apr 15, 2013 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Kleines Beispiel mit JButton funktioniert allerdings nur wenn du den ActionListener nur für JButton benutzt,
solltest du ihn auch für andere Sachen benutzen musst du mit instanceof überprüfen, um welches Objekt es sich bei dem, von getSource(), zurückgelieferten Objekt handelt.

Code: [AUSKLAPPEN]
...

    public void Initialisieren()
    {
        Button_Handler listener = new Button_Handler();
       
        for(int i = 0; i < tileB.length; i++)
            tlieB[i].addActionListener(listener);
    }

    private class Button_Handler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            JButton tempBtn = e.getSource();

            //checken welcher Button geklickt wurde
            for(int i = 0; i < tileB.length; i++)
            {
                if(tileB[i] == tempBtn)
                    System.out.println(tileImages[i]);
            }
        }
    }
}
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62

US-Blitz

ehemals "SimssmiS"

BeitragMo, Apr 15, 2013 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank euch!
Ich habe viel gelernt und das Problem nun gelöst.



vlt. könnt ihr mir ja bei meinem aktuellen Problem auch helfen.

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group