Button ActionListener funktioniert nicht

Crusher159

Neues Mitglied
Hallo,
ich hoffe auf Hilfe 🙂

Ich lasse nach dem Hinzufügen von Elementen zu einer Liste automatisch Buttons erzeugen, die dafür da sind diese Elemente später wieder löschen zu können. Nur leide reagieren die Buttons gar nicht auf den Klick. Was mache ich falsch?

Java:
for (int i = 0; i<z; i++) {
            comp[i+e][0] = new JLabel(ziehung.ausgabe(2, i).getName());
            comp[i+e][1] = new JLabel(ziehung.ausgabe(2, i).getGruppe()+"2");
            comp[i+e][2] = new JLabel(ziehung.ausgabe(2, i).getLand());
            JButton j = new JButton("Delete");
            j.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Test");
                    ziehung.delete(comp, j);
                    panel_3.revalidate();
                    panel_3.repaint();
                }
            });
            
            comp[i+e][3] = j;
            panel_3.add(comp[i+e][0]);
            panel_3.add(comp[i+e][1]);
            panel_3.add(comp[i+e][2]);
            panel_3.add(comp[i+e][3]);
            
        }
 
Kannst Du nähere Informationen geben, was genau nicht funktioniert? Was genau reagiert nicht? Du hast den Button erstellt und die Methode sollte ausgeführt werden. Du solltest also die "Test" Ausgabe bekommen, oder nicht?

Was etwas dubios aussieht ist die Datenstruktur. Du hast da ein 2D Array mit irgendwelchen Controls (JLabel und der Button). Da Du hier eine feste Struktur zu haben scheinst, wäre da denkbar, dass man das über eine Klasse machen würde oder so. Dann hast Du auch nicht mehr die magic Numbers 0, 1, 2 und 3.

Dann hast Du da eine anonyme innere Klasse, in der auf Dinge außen zugreifst. Das geht technisch, aber da bin ich immer etwas skeptisch und ich sehe da auch immer, dass die Struktur vermutlich eine Überarbeitung braucht. Aber da wir nur einen kleinen Ausschnitt sehen, kann der Einwurf unberechtigt sein.

Was auf jeden Fall aufstößt: In der Klasse hast Du das panel und da fügst Du Controls zu. Aber bei der Delete Action entfernst Du es bei Ziehung - aber wo wird das Panel angepasst? Das revalidate / repaint macht diesbezüglich ja nichts. Daher wäre meine Vermutung, dass Du den Knopf drückst, die Ausgabe "Test" bekommst und Du erwartest, dass die betreffenden Controls weg sind und dies ist nicht der Fall. Einfach weil Du die Controls nicht aus dem Panel entfernt hast.
 

Zurück
Oben