Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    Eseguire un metodo esterno da un linstener

    Vorrei usare l'architettura MVC con le swing.
    Di conseguenza vorrei separare la parte di logica dalla parte di grafica.
    Di seguito riporto un esempio della classe di controllo e di view.

    codice:
    public class CtrlStart { 
    	 	
             FrmStart frmStart; 	 	 
             public CtrlStart(String titolo){          
                      frmStart = new FrmStart(this, titolo);     
             } 	 	
    
             public void evento1(){         
                     JOptionPane.showMessageDialog(frmStart, "Premuto tasto evento1");                 
             } 
    }
    Di seguito c'è la FrmStart

    codice:
    public class FrmStart extends javax.swing.JFrame { 	 	
              
              CtrlStart app;      
              
              public FrmStart(CtrlStart app, String title) {
                      this.app = app;         
                      this.title = title; 		 		    
                      initComponents(); 		 		
                      btnEnter.addActionListener(new ActionListener() {              
                            public void actionPerformed(ActionEvent e) {                               
    
                            }         
    
                       }); 	
                }	 
    }
    Dentro la actionPerformed vorrei richiamare il metodo evento1() della classe CrtStart, come posso fare?

    Grazie Piccolognu

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Eseguire un metodo esterno da un linstener

    Originariamente inviato da piccolognu
    Dentro la actionPerformed vorrei richiamare il metodo evento1() della classe CrtStart, come posso fare?

    Grazie Piccolognu
    Innanzitutto riformatta il codice postato ..... è illeggibile!

    evento1 da quanto si evince dal codice, è un metodo "statico". Quindi in actionPerformed tecnicamente basterebbe invocare CtrlStart.evento1() e basta.

    Comunque il codice non è nemmeno corretto, per evento1 non è dichiarato il tipo di ritorno (void si intuisce)

    E infine sappi che questo non è e non centra nulla con il MVC. Cioè se pensi che questa invocazione sia qualcosa che riguarda "MVC" .... beh, hai sbagliato qualcosa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    formatta bene il codice (così è inguardabile)

    Per quanto riguarda il tuo quesito, devi fare in modo che nella seconda classe ci sia un riferimento a quella da cui devi chiamare il metodo.
    nel tuo caso il riferimento è già presente (è nella classe che contiene l'inner) quindi ti dovrebbe bastare

    codice:
    app.metodo();
    Come dice andbin, nel caso di metodi statici ti basta

    nomeClasse.metodo();

    ah ogni metodo ha il valore di ritorno (fatta eccezione per il costruttore)

  4. #4
    Scusate per la formattazione, ho sistemato.
    il metodo che voglio richiamare non è statico.
    Dentro il metodo actionPerformed non riesco ad avere la visibilità del riferimento della classe CtrlStart

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    non ho capito questo doppio riferimento (FrameStart dentro CommandStart e viceversa).Non so come fai ad istanziarle tutte e due visto che vuoi nel costruttore il riferimento all'altra (in entrambi i costruttori).
    fissa la classe principale e mantieni un riferimento di questa nella seconda. Questo ti dovrebbe bastare.

    scusa non hai un'istanza della classe (che passi come parametro nel costruttore)?
    dovresti fare come ti dicevo io

    app.metodo();

    e dovresti stare a posto.

  6. #6
    Su FrmStart ho eliminato la proprieta' CtrlStart e ho aggiunto il modificator CtrlStart final
    e ora funziona come dicevi tu Valia

    Di seguito c'è la classe FrmStart con le modifiche.

    codice:
    public class FrmStart extends javax.swing.JFrame {          
                      String title = "";      
                      public FrmStart(final CtrlStart app, String title) {                  
                              this.title = title;         
                              initComponents();         
                              btnEnter.addActionListener(new ActionListener() {              
                                           public void actionPerformed(ActionEvent e) {                    
                                                    app.accediProva();             
                                           }         
                                });     
                        }
    }
    Cmq è il modo giusto per separare la vista dalla logica?

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Non so cosa fa l'altra classe, una vera applicazione del pattern MVC non la vedo.

  8. #8
    L'altra classe visulizza solo un messaggio..
    Cosa manca per essere MVC?

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    hai chiaro cosa fa l'MVC e dove viene applicato?
    Un esempio con le swing ce l'hai con le JTable, JList, JTree.

    Tu pensa di fare un programmino che legga e visualizzi un elenco di nomi (che hai su file). vediamo come mi separi i "ruoli"

  10. #10
    creo un bean che riscpecchia i dati che voglio visualizzare sulla tabella
    Creo una classe che ha una proprieta di tipo bean.
    Leggo il file con i dati da visualizzare e valorizzo il bean.
    Alla tabella passo il bean per visualizzarlo.
    Dentro la classe di controllo implemento i metodi di gestione della tabella
    modifica, cancella.. ecc ecc..
    I metodi di gestione della tabella li richiamo con un listner

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.