Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Gestione degli eventi.

  1. #1

    Gestione degli eventi.

    Salve a tutti.
    Mi sono appena iscritta perché ho notato che siete tutti molto pratici di programmazione. Io purtroppo non ci capisco molto ma vorrei imparare.

    Vorrei porgervi un problema che non riesco proprio a risolvere. Ho provato a cercare in altre discussioni ma non ho trovato nulla. Se ho cercato male scusatemi!

    Allora faccio un sunto del problema con un esempio banale.

    Io ho 4 classi.


    Pannello1 extends JPanel: In questo pannello c'è una JTextArea o una qualsiasi altra area in cui inserire del testo (non modificabile)

    Pannello2 extends JPanel: In questo pannello ho 3 JLabel con delle figure.

    Pannello3 extends JPanel: in questo pannello ho un JButton.

    MiaJFrame extends JFrame: nel contentPane di questa JFrame ho le istanze dei pannelli precedenti.

    La mia applicazione deve:

    Al clic del pulsante sul pannello 3: modificare l'area di testo nel Pannello1 e le figure nel Pannello3:

    Questo problema sarebbe molto semplice per me se il pulsante fosse direttamente del contentPane della JFrame, ma così non è. Come posso far interagire dei pannelli legati solo dal ContentPane della JFrame in cui stanno??

    Grazie.

    P.S. spero riusciate ad aiutarmi, vi prego di non usare un linguaggio troppo tecnico perchè ripeto sono una scarsona!

  2. #2
    Due versioni

    1) soluzione orrida: passi al pannello 3 i riferimenti ai pannelli 1 e 2, dove mantieni delle variabili di istanza senza modificatore (quindi non private) che puoi accedere liberamente anche dall'esterno
    2) una soluzione migliore: passi ancora al pannello 3 i riferimenti ai pannelli 1 e 2, nei quali metti un metodo che modifica le loro variabili di istanza (che a questo punto saranno private)

    Esempio con una JLabel

    codice:
    public class Panel1 extends JPanel {
       private JLabel lab;
    
       ...
    
       void modifyLabel(String newMsg) {
          lab.setText(newMsg);
       }
    questa è la classe che contiene la label. Nel pannello che contiene il bottone assegnerai a quest'ultimo un listener che farà questa chiamata di metodo

    panel1.modifyLabel("ho premuto il bottone!");

    ovviamente nel pannello dovrà esserci un riferimento all'oggetto del pannello 1

    spero di esser stato comprensibile!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.