G
Guest
Gast
Hi,
ich möchte jedem Element eines Arrays von Swing-Komponenten in einer Schleife einen Listener zuweisen, der in einer anonymen Klasse geschrieben ist.. das ganze soll in etwa so aussehen (als Beispiel ein JButton und ein ActionListener):
[Bitte Kommentare beachten!]
Ich habe das Problem schon gegoogelt, in Foren gestöbert und auch versucht, es mit folgenden Techniken zu umgehen:
1. Ich habe eine eigene Unterklasse der jeweiligen Swing-Komponente (die dann schon den Listener enthielt) geschrieben.. klappt nicht, da ich auf die anderen Komponenten im Array zugreifen möchte, die dann z.T. als nicht initialisiert erkannt werden (obwohl sie es sind).
2. Ich habe eine SwingWorker-Unterklasse eingebaut, die die Zuweisung der ActionListener übernehmen sollte.. Problem bleibt weiter bestehen.
Es ist wichtig, dass die Listener-Vergabe in der Schleife und mit anonymen Klassen geschieht. Außerdem soll jeder Listener (wie im Beispiel angedeutet) eine spezifische (vom Array-Index abhängige) Verhaltensweise haben. Mit meiner Methode wird aber jedem Element scheinbar ein Listener zugewiesen, der nicht bei but auch von i abhängt.
Es wäre nett, wenn mir jemand weiterhelfen könnte!
lg sergeAnt
ich möchte jedem Element eines Arrays von Swing-Komponenten in einer Schleife einen Listener zuweisen, der in einer anonymen Klasse geschrieben ist.. das ganze soll in etwa so aussehen (als Beispiel ein JButton und ein ActionListener):
[Bitte Kommentare beachten!]
Code:
public class ListenerTest extends JFrame {
JButton[] but;
int i;
ListenerTest(){
setLayout(new FlowLayout());
setSize(200, 100);
but = new JButton[10]; // Array erstellen
// wenn das i nicht als Objektvariable deklariert wird, klappt es nicht!
for(i = 0; i < but.length; i++){
but[i] = new JButton();
but[i].addActionListener(new ActionListener(){ // anonyme Klasse für die Listener
public void actionPerformed(ActionEvent e){
// hier liegt der Fehler: es wird nicht jedem Element der passende Listener zugewiesen.
// Außerdem gibts ne ArrayIndexOutOfBoundsException
but[i].setText(Integer.toString(i)); // eine Test-Reaktion
}
});
getContentPane().add(but[i]);
}
setVisible(true);
}
public static void main(String[] args){
new ListenerTest();
}
}
Ich habe das Problem schon gegoogelt, in Foren gestöbert und auch versucht, es mit folgenden Techniken zu umgehen:
1. Ich habe eine eigene Unterklasse der jeweiligen Swing-Komponente (die dann schon den Listener enthielt) geschrieben.. klappt nicht, da ich auf die anderen Komponenten im Array zugreifen möchte, die dann z.T. als nicht initialisiert erkannt werden (obwohl sie es sind).
2. Ich habe eine SwingWorker-Unterklasse eingebaut, die die Zuweisung der ActionListener übernehmen sollte.. Problem bleibt weiter bestehen.
Es ist wichtig, dass die Listener-Vergabe in der Schleife und mit anonymen Klassen geschieht. Außerdem soll jeder Listener (wie im Beispiel angedeutet) eine spezifische (vom Array-Index abhängige) Verhaltensweise haben. Mit meiner Methode wird aber jedem Element scheinbar ein Listener zugewiesen, der nicht bei but auch von i abhängt.
Es wäre nett, wenn mir jemand weiterhelfen könnte!
lg sergeAnt