Gui uguali

di il
6 risposte

Gui uguali

Salve

ho un problema praticamente ho due interfacce grafiche uguali con la stessa barra di menu (con voce di menu File e "sottoVoce" Apri).
naturalmente implemento un unico metodo (impostando solo il titolo corretto con setTitle(titolo))
il problema è che non so come faccio a dire al compilatore se premi Apri dall'interfaccia 1 fai questo
se interfaccia 2 fai questo...

6 Risposte

  • Re: Gui uguali

    arp1 ha scritto:


    ho due interfacce grafiche uguali con la stessa barra di menu (con voce di menu File e "sottoVoce" Apri).
    Hai classi distinte che definiscono una gui uguale .... o hai 2 istanze della stessa classe?
  • Re: Gui uguali

    Ciao

    no solo una classe public che definisce con un metodo la gui e all'interno una classe private che definisce il menu
  • Re: Gui uguali

    arp1 ha scritto:


    ciao

    no solo una classe public che definisce con un metodo la gui e all'interno una classe private che definisce il menu
    Ok ma tieni presente che senza vedere il tuo codice non posso avere una idea precisa del tuo "design" delle classi.

    Ti mostro uno scenario abbozzato:
    public class MyFrame implements ActionListener {
        private JMenuItem apriMenuItem;
        // ....
    
        public MyFrame(String titolo) {
            super(titolo);
    
            apriMenuItem = new JMenuItem("Apri");
            apriMenuItem.addActionListener(this);
    
            // ....
        }
    
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == apriMenuItem) {
                // ... 
            }
        }
    }
    Avendo 2 istanze es.
    MyFrame f1 = new MyFrame("Titolo 1");
    MyFrame f2 = new MyFrame("Titolo 2");
    Quando in uno dei due frame viene cliccata la voce "Apri", non c'è assolutamente alcun dubbio di quale metodo viene invocato e di che cosa può succedere (e su cosa).

    actionPerformed viene invocato su quella istanza di MyFrame, il source dell'evento viene confrontato con il apriMenuItem di quella istanza di MyFrame.
    Ognuna delle istanze di MyFrame potrebbe avere una istanza di JFileChooser. Il codice in quel if, opererebbe sul JFileChooser di quella istanza di MyFrame.

    Il punto è che devi aver chiaro quali oggetti hai a disposizione, cosa contengono e come i metodi di istanza possono operare sullo stato di quegli oggetti.
    Il problema insomma non è Swing o la gui in generale!
  • Re: Gui uguali

    Ti ringrazio per la risposta, volevo farti una domanda tecnica
    quando si implementano i vari ActionListener per i pulsanti e voci menu di una applicazione è meglio creare una classe apposita dove implementarli, oppure implementare ogni ActionListener nelle classi e nei metodi dove vengono istanziati i pulsanti???
  • Re: Gui uguali

    arp1 ha scritto:


    quando si implementano i vari ActionListener per i pulsanti e voci menu di una applicazione è meglio creare una classe apposita dove implementarli, oppure implementare ogni ActionListener nelle classi e nei metodi dove vengono istanziati i pulsanti???
    Ai metodi addXyzListener non importa dove è tecnicamente implementato il listener, interessa solo ricevere un oggetto che implementa quel listener (altrimenti la invocazione non compilerebbe, ovviamente).

    La gestione degli eventi è generalmente una cosa da fare il più "vicino" possibile (e tipicamente il più nascosta all'esterno possibile) al punto in cui sono creati e gestiti i componenti. Questo perlomeno per evitare di fare design strampalati in cui si implementano i listener in classi esterne e si è "costretti" ad ottenere l'accesso ad altri componenti tramite metodi getter o peggio accedendo direttamente ai campi di altre classi.

    Quindi in genere le soluzioni più sensate sono:
    - implementare un listener a livello della classe che estende es. JFrame, JPanel o altro (come l'esempio che ho fatto).
    - implementare un listener con una anonymous inner class (in genere dentro il costruttore della tua classe che estende JFrame, JPanel o altro).
    - implementare un listener con una "regular" inner class (una classe non-static che è membro di un'altra) dentro la tua classe che estende JFrame, JPanel o altro.

    Esistono altri scenari, ad esempio con le "local" inner class ma le ho viste raramente usate.
    Un altro aspetto importante è che se un listener dovrà gestire più componenti, all'interno dei suoi metodi c'è da distinguere il componente in base al "source" dell'evento (a meno di dover fare logiche generali o indipendenti da uno specifico componente).
  • Re: Gui uguali

    Ti ringrazio gentilissimo... risposta più che esauriente
Devi accedere o registrarti per scrivere nel forum
6 risposte