Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    306
    mi sa che devo comunque passargli i panel al mio Listener
    per poter modificare gli oggetti contenuti su i vari panel.

  2. #12
    scusa ma la label dove l'hai dichiarata? Puoi creare un metodo di tipo static nella stessa classe in cui hai la label da modificare, che ti modifica appunto il valore della label (scusa il gioco di parole)...quindi nel listener al momento opportuno chiami questo metodo che ti modifica il contenuto della label...
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  3. #13
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    306
    la label è dichiarata nel panelA
    la modifica viene invocata cliccando un tasto nel panelB

    potrei istanziare nel panelA il mio Listener,passandogli i sotto panel, e poi lo pass0 a i panelB e C in modo da poterlo associare sui pilsanti.

    cosa ne pensi.

  4. #14
    Io creerei un metodo init(Gestore-Eventi) all'interno della classe del panenllo che ha il bottone.
    Poi nel "probabile" main della tua applicazione:


    // creo pannello a
    aPAnel a = new aPanel();

    // creo pannello b
    bPanel b = new bPanel();

    // crei il gestore eventi passandogli un riferimento
    // al pannello che ha la label da modificare.
    // Il gestore venti userà questo riferimento
    // per accedere alla label da modificare
    EventManager evtManager = new EventManager(b);

    // inizializzi il pannello col bottone da monitorare
    // passando il gestore eventi al metodo init()
    a.init(evtManager);


    Il metodo init(Gestore-Eventi) non farà altro che registrare evtManager come ascoltatore eventi del bottone del pannello a:

    init(EventManager e) {

    button.addActionListener(e);
    }


    Poi nel metodo actionPerformed(), testi se l'evento è generato da "button" e tramite il riferimento al pannello "b" col quale hai costruito il gestore eventi cambi la label con riferimento_a_b.label.setText("blabla")

  5. #15
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Sì: devi passare come parametri (al costruttore, ad esempio) all'ActionListener i riferimenti ai pannelli con cui vuoi lavorare.
    Vediamo di costruire un piccolo esempio:
    codice:
    public class Listener implements ActionListener {
    
       private MioPanel1 mp1;   // Riferimento al pannello con il pulsante
       private MioPanel2 mp2;   // Riferimento al pannello con la Label
    
       public Listener(MioPanel1 mp1, MioPanel2 mp2) {
          this.mp1 = mp1;
          this.mp2 = mp2;
       }
    
       public void actionPerformed(ActionEvent ae) {
          // L'utente ha cliccato: vediamo quale pulsante
          JButton jb = (JButton) ae.getSource();
          if (jp.equals( mp1.getPulsante1() )) {
             // clic sul pulsante 1
             mp2.setLabel("Pulsante 1");
          } else {
             // clic sul pulsante 2
             mp2.setLabel("Pulsante 2");
          }
       }
    }
    
    public class MioPanel1 extends JPanel {
       private JButton jb1;
       private JButton jb2;
    
       public MioPanel1() {
          jb1 = new JButton("Pulsante 1");
          jb2 = new JButton("Pulsante 2");
          add(jb1);
          add(jb2);
       }
       public void setListener(Listener l) {
          jb1.addActionListener( l );
          jb2.addActionListener( l );
       }
       public JButton getPulsante1() { return jb1; }
       public JButton getPulsante2() { return jb2; }
    }
    
    public class MioPanel2 extends JPanel {
    
       private JLabel lbl;
    
       public MioPanel2() {
          lbl = new JLabel("aspetto");
          add( lbl );
       }
    
       public void setLabel(String s) {
          lbl.setText( s );
       }
    }
    
    public class Esegui {
       public static void main(String [] args) {
          MioPanel1 mp1 = new MioPanel1();
          MioPanel2 mp2 = new MioPanel2();
          Listener ls = new Listener(mp1, mp2);
          JFrame jf = new JFrame("Finestra");
          jf.getContentPane().setLayout( new GridLayout(1, 2) );
          jf.add(mp1);
          jf.add(mp2);
          jf.setSize(800, 600);
          jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          jf.setVisible(true);
       }
    }
    Questa è una situazione molto generale. Nel particolare, se ad esempio hai solamente un pulsante nel Pannello1, non è necessario passare anche il suo riferimento all'ActionListener, risparmiando un parametro nel costruttore e altra complessità. Comunque, questo è un caso abbastanza generale.

    Non l'ho provato perchè l'ho scritto al volo, ma dovrebbe andare.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #16
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    306
    OK

    vedo che siete daccordo con me per passare i panel interessati.

    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.