Se proprio vuoi gestire gli eventi con classi esterne, tecnicamente è fattibile. Ma la classe esterna dovrebbe ottenere, tipicamente tramite costruttore, un reference alla classe da gestire.Originariamente inviato da Dreamer89
Ma come collego un file ai suoi eventi che si trovano in un'altra classe esterna?
Esempio (ometto gli import):
a) È brutto.codice:public class MyFrame extends JFrame { JButton button; // accesso almeno di "default", se non addirittura public!! .... button.addActionListener (new MyHandler (this)); ... } - - - - altro sorgente - - - - public class MyHandler implements ActionListener { private MyFrame frame; public MyHandler (MyFrame frame) { this.frame = frame; } public void actionPerformed (ActionEvent e) { frame.button.setText ("blabla"); // esempio } }
b) È lungo e noioso ... devi sempre usare quel 'frame' per usare/invocare qualcosa.
c) Viola palesemente una delle principali regole della OOP, ovvero l'incapsulamento.
EDIT: l'esempio che ho fatto è decisamente il peggiore per quanto riguarda il punto c). Se dovessi impostare da MyHandler il testo del pulsante potrei decidere, ad esempio, di tenere privato il 'button' e mettere in MyFrame un metodo pubblico per fare ciò ma in ogni caso sarebbe codice in più e comunque da valutare, se vale la pena o no, in base a cosa si deve fare.
Indipendentemente da questo, MyHandler deve avere comunque un reference a MyFrame.

Rispondi quotando