Netbeans Listener - Anonymous, inner class, main class?

membersound

Bekanntes Mitglied
Hallo,

bei Netbeans kann ich ja listener generation style einstellen: Anonymous, inner class, main class.

Einige verpönen den Gui Editor vielleicht sowieso, aber ich find ihn ganz praktisch, nimmt einem die nervigen Sachen schön ab. Aber meine Frage ist eigentlich unabhäbngig vom Editor:

Wollte einfach mal fragen, ob es generell egal ist, welchen Style man anwendet. Bzw wann man welchen wählen sollte, weil er ggf praktischer ist für verschiedene Aufgaben?
Bisher fand ich auch den Style mit Anonymous Listeners ganz gut, weil schön übersichtlich ohne jede Menge if-else Verzweigungen einer großen actionPerformed() Methode.

Aber schreibt doch mal 🙂
Danke
 
also falls du jetzt Unterschied Anonymous ActionListener Vs. eigene Klasse ActionListener meinst... würde ich sagen

Anonymous -> wenn die Funktion nur einmal gebraucht wird
Eigene ActionListener Klasse -> wenn du die selbe Funktion mehrmal brauchst 🙂
 
Ich hab das mal eben rauskopiert, um die Unterschiede besser zu sehen.
Ich frag mich eben, wann man was macht. Denn diese Unterschiede in Funktionalität gibt es wahrscheinlich ja, um verschiedene Sachen damit zu bezwecken?

Java:
//unterschiede bei netbeans zwischen den einzelnen listeners:

//anonymous:

        jButton1.setText("jButton1");
        jButton2.setText("jButton2");


        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

//----------------
//one inner class:

        jButton1.setText("jButton1");
        jButton1.addActionListener(formListener);

        jButton2.setText("jButton2");
        jButton2.addActionListener(formListener);


    private class FormListener implements java.awt.event.ActionListener {
        FormListener() {}
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            if (evt.getSource() == jButton1) {
                NewJFrame.this.jButton1ActionPerformed(evt);
            }
            else if (evt.getSource() == jButton2) {
                NewJFrame.this.jButton2ActionPerformed(evt);
            }
        }
    }


//--------------
//main class:

        jButton1.setText("jButton1");
        jButton1.addActionListener(this);

        jButton2.setText("jButton2");
        jButton2.addActionListener(this);

    public void actionPerformed(java.awt.event.ActionEvent evt) {
        if (evt.getSource() == jButton1) {
            NewJFrame.this.jButton1ActionPerformed(evt);
        }
        else if (evt.getSource() == jButton2) {
            NewJFrame.this.jButton2ActionPerformed(evt);
        }
    }
 
Also ich finde die "anonymous"-Lösung mit Abstand am besten.

"one inner class" verstößt gegen das Single Responsibility Principle - und wozu habe ich die Möglichkeit, unterschiedliche Listener dranzuhängen, wenn ich dann doch einen Monsterlistener nehme, wo ich mir die richtige Aktion wieder rausfriemeln muss?

"main class" ist noch schlimmer, zum vorher Gesagten kommt noch hinzu, dass eine Klasse mit Interfaces dekoriert wird, die absolut nicht ihren Aufgaben entsprechen: Dass ein JFrame an irgendwelchen Buttons lauscht, ist ein Implementationsdetail, das nicht durch die API publiziert werden sollte (theoretisch könnte sogar irgendein Dödel versuchen, dein Fenster an seinen Buttons horchen zu lassen - absurd)

Oft ist die sauberste Lösung, [c]Action[/c]s (als anonyme Klassen) zu definieren: Die kann man [c]JButtons[/c], [c]JMenuItems[/c] u.s.w.schon im Konstruktor mitgeben, sie sind (ab Java 1.6) auch konsistent (wird ein Button disabled, ist es das Menü mit der gleichen Aktion auch). Keine Ahnung, ob man das bei NetBeans auch irgendwie einstellen kann.
 
Zuletzt bearbeitet:
bei dem gefrickel was der netbeans gui editor da erstellt ist es eigentlich ziemlich wurscht. Ob man zu schlechtem code etwas schlechtes, etwas mehr schlechter oder etwas besseres hinzufuegt is recht egal.

stimme Landei aber zu, die "mainclass" Loesung ist am schlimmsten, und wie auch schon gesagt wurde haengts von der Logik und der Wiederverwendung des Listeners ab, ob eine anonyme passend ist (wenig logik, keine wiederverwendbarkeit) oder man eine eigene Klasse erstellt (mehr logik und wiederverwendbarkeit)
 

Neue Themen


Zurück
Oben