ActionListener Dynamisch erstellen

xloouch

Erfahrenes Mitglied
Hallo zusammen. Wie im Thread vorher ersichtlich, habe ich dynamisch etwas in Layer geschrieben. Eigentlich gehts nun nicht mehr um die Layer..Sondern um den ActionListener.. Ich habe mir jedoch den vorherigen Thread als Vorbild genommen.

Hier nun mein Code:
Code:
       //Hier werden die einzelnen Comboboxen erstellt
        for(int i=0;i<initialPins;i++){
            ceingabe[i] = new JComboBox(patternExamples);
            eingabeFeld.add(ceingabe[i]);
        }
        
        // Hier soll nun der ActionListener für alle diese Comboboxen erstellt werden
        // Dies funktioniert leider nicht!
        for(int i=0;i<initialPins;i++){
            ceingabe[i].addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e)
                    {
                        text1 = (String) ceingabe[i].getSelectedItem(); 
                        statusAnzeigen("Eingabe:" +text1);
                        eingabe[i].setText(text1);
                    }
                }
            );
        }

Die Fehlermeldung, welche erscheint:

Code:
local variable i is accessed from within inner class; needs to be declared final

Wie mache ich das nun am gescheitesten, dass ich dynamisch für alle "ceingabe" einen ActionListener implementiere? :confused:

Vielen Dank für eure Hilfe im voraus
 
Also - ich würde das so machen, nicht jeder ComboBox einen eigenen ActionListener zuzuweisen, sondern allen den gleichen..
Bsp:
Java:
public class .. implements ActionListener
{
..
...
for(int i=0;i<initialPins;i++)
{
  ceingabe[i].addActionListener(this);
}
..
...
public void actionPerformed(ActionEvent e)
{
  if( e.getSource() instanceof JComboBox ) //Stellt sicher das das Ereignis von einer JComboBox kommt
  {
    JComboBox src = (JComboBox) e.getSource();
    String text1 = (String) src.getSelectedItem();
    statusAnzeigen("Eingabe:" +text1);
    src.setText(text1);
  }
}

Gruß
Tobias
 
Wäre eine gute Idee, aber leider funktioniert es so nicht.Habe es in den Source hineinkopiert und ich bekam wieder eine Fehlermeldung. Es wäre schön, wenns möglich wär, so wie meine ursprüngliche Idee zu realisieren
 
Ach ich hab mich auch verlesen -.- Blöde Sache..
Java:
        for(int i=0;i<initialPins;i++)
{
  ceingabe[i].addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
      JComboBox src = (JComboBox) e.getSource();
      text1 = (String) src.getSelectedItem();
      statusAnzeigen("Eingabe:" +text1);
      eingabe[ findIndex(ceingabe, src) ].setText(text1);
    }
  });
}
..
..
public int findIndex( Object[] objects, Object object ) 
{
  for ( int i = 0; i < objects.length; i++ ) 
  {
    if ( objects[ i ].equals( object ) )
      return i;
  }
  return -1;
}

Du kannst das i an der Stelle nicht verwenden, da i ja keinen Wert mehr hat der fest ist.. Java kann das also nicht verarbeiten.. Spontan würde mir keine andere Möglichkeit einfallen das zu lösen..

Achja - die actionPerformed-Methode von dem Post würde auch mit meiner anderen Version klappen - musst du wissen welche du benutzen möchtest..

Gruß
Tobias
 
Thx. Nun funktionierts wunderbar mit den ActionListenern..
Aber es hat sich schon ein neues Problem ergeben. Die werte, welche drin in der ComboBox drin stehen, werden nicht richtig übergeben.. grummel..

zudem wird das programm bei diesem code immer eine NullPointException.. fragt mich nicht warum:

Code:
       for(int i=1;i<initialColors+1;i++){
            System.out.println("Test 2: "+i);
            patternExamples[i]=""+i+"";
        }

patternExamples[] ist alst String Array deffiniert...
 
Zuletzt bearbeitet:
Hallo xloouch,

xloouch hat gesagt.:
zudem wird das programm bei diesem code immer eine NullPointException.. fragt mich nicht warum:

Eine Fehlermeldung beinhaltet zumeist auch eine Zeilenangabe in der dieser Fehler passiert. Wenn du gezielt nach dieser Stelle suchst müsstest du den Fehler finden. Eine NullPointerException ensteht dadurch dass man eine Variable nicht primitiven Datentyps erstellt, dieser aber kein Objekt zuweist. Darin ist nun implizit eine Null-Referenz gespeichert.Wenn du nun versuchst mit dieser Variablen zu arbeiten, wird eine sogenannte NullPointerException geworfen.

Das könnte Beispielsweise dein Stringarray sein, das du eventuell vergessen hast zu initialisieren.


Vg Erdal
 
Danke Flashray.. genau das war das problem.. Danke für eure schnelle Hilfe.. funktioniert nun alles wunderbar
 
Zurück