Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268

    Gestione internal Frame

    In un JFrame ho inserito un JDesktopPane e un JMenu.
    nel JDesktopPane mostro un internal frame.
    vorrei capire come faccio ad un evento del menuitem ricavare i valori inseriti nell'internalframe

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da X-mac Visualizza il messaggio
    In un JFrame ho inserito un JDesktopPane e un JMenu.
    nel JDesktopPane mostro un internal frame.
    vorrei capire come faccio ad un evento del menuitem ricavare i valori inseriti nell'internalframe
    Beh, intanto puoi avere più JInternalFrame, giusto?
    Se così, allora innanzitutto dovresti sapere tu se le voci del menù hanno senso per ciascun internal frame e in tal caso, forse, avrebbe più senso mettere il menu nel JInternalFrame.
    Se non vuoi/puoi mettere il menù in ognuno dei JInternalFrame, allora devi scegliere su quale JInternalFrame operare e la cosa tipica è "quello selezionato". JDesktopPane ha il metodo getSelectedFrame().

    Il tuo internal frame sarà presumibilmente (e sarebbe preferibile) una tua classe che estende JInternalFrame. A quel punto fai il cast e puoi invocare metodi per ottenere dati, metodi che devi ovviamente implementare ed "esporre" in modo oculato in base a cosa rappresenta il contenuto del internal frame.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    Se non vuoi/puoi mettere il menù in ognuno dei JInternalFrame, allora devi scegliere su quale JInternalFrame operare e la cosa tipica è "quello selezionato". JDesktopPane ha il metodo getSelectedFrame().
    Fin qui ci sono arrivato
    Il tuo internal frame sarà presumibilmente (e sarebbe preferibile) una tua classe che estende JInternalFrame.
    si la mia classe estente JInternaFrame
    A quel punto fai il cast e puoi invocare metodi per ottenere dati, metodi che devi ovviamente implementare ed "esporre" in modo oculato in base a cosa rappresenta il contenuto del internal frame.
    da qui in poi tutto buio….

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da X-mac Visualizza il messaggio
    da qui in poi tutto buio….
    Ok, allora faccio un esempio (poi adatta tu in base alle tue esigenze): immagina che nel tuo internal frame stai gestendo/editando i dati di una persona (nome, cognome, indirizzo, città, ecc...) con una serie di campi.

    Ci sono tecnicamente svariate possibilità per estrarre i dati dalla tua classe:

    1) Esporre metodi che permettono di ottenere i riferimenti direttamente ai componenti, es.
    public JTextField getTextFieldNome()
    public JTextField getTextFieldCognome()
    ....

    2) Esporre metodi che permettono di ottenere i dati, es.
    public String getNome()
    public String getCognome()
    ....

    3) Esporre i dati come entità unica tramite un apposito "bean" e un singolo getter, es.
    public Persona getPersona()


    Delle 3 opzioni, la 1) è la peggiore. Per un motivo molto semplice: vai a "esporre" troppe informazioni, cioè il fatto di far sapere all'esterno che ci sono dei campi e sono di quel tipo ben preciso. E che oltretutto sarebbero manipolabili dall'esterno. Inoltre se cambia l'interfaccia grafica del tuo internal frame (es. un campo che prima era JTextField ora è JTextArea) .... impatta anche sul resto del codice.
    Le opzioni 2) e 3) sono migliori e man mano ad un livello di astrazione maggiore.
    Non sono le uniche soluzioni possibili ma sono ragionevolmente le minime che si possono fare. Se hai capito il concetto, non dovresti avere particolari problemi a individuare lo scenario che più si adatta al tuo caso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    ok, intanto grazie per la pazienza….
    vorrei adottare lo scenario 2, ossia esporre i metodi con i dati che mi servono…
    nella mia classe JInternalFrame ho creato
    
    codice:
    
       public String getIsin(){
           String Isin = jFxIsin.getText();
           return Isin;
       }
    
    però non capisco come faccio a vederla dall'action performed del mio menù….che è nel JFrame che contiene tutto...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da X-mac Visualizza il messaggio
    però non capisco come faccio a vederla dall'action performed del mio menù….che è nel JFrame che contiene tutto...
    Se hai il riferimento al JDesktopPane (dovresti averlo o perlomeno fare in modo che sia così), usi getSelectedFrame(). Che ti fornisce come tipo "statico" un JInternalFrame. Ma tu sai che i tuoi internal frame sono della tua classe specifica che estende JInternalFrame. Quindi fai un "downcast" (che non darà problemi per via dell'assuzione appena detta) e quindi puoi invocare quei metodi che espongono i dati.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    beh non è che ci capisco molto….
    codice:
     private void salvaMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                              
           JInternalFrame nome;
          
         nome =  deskTop.getSelectedFrame();
    da qui non ho capito come fare il downcast etch mi puoi fare un esempio….

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da X-mac Visualizza il messaggio
    beh non è che ci capisco molto….
    codice:
     private void salvaMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                              
           JInternalFrame nome;
          
         nome =  deskTop.getSelectedFrame();
    da qui non ho capito come fare il downcast etch mi puoi fare un esempio….
    codice:
    MioInternalFrame frame = (MioInternalFrame) deskTop.getSelectedFrame();
    
    if (frame != null) {
        String isin = frame.getIsin();
        ......
    Ovviamente MioInternalFrame è il nome della *tua* classe.
    getSelectedFrame può restituire null, se non c'è un frame selezionato, quindi va testato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    ok, ho capito il meccanismo.
    c'è un problema come hai detto all'inizio di questa discussione, posso avere più JInternalFrame. Nel mio caso faccio in modo di visualizzarne uno per volta.
    Utilizzando deskTop.getSelectFrame() - ottengo il frame "visualizzato", però in base al frame visualizzato devo variare il metodo salva.
    Ho un metodo rozzo che mi scrive in una label una variabile e in base alla varibile so che frame ho aperto e quindi mi regolo di conseguenza, ma ci sarebbe un sistema per poter gestire meglio la cosa?


  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da X-mac Visualizza il messaggio
    Ho un metodo rozzo che mi scrive in una label una variabile e in base alla varibile so che frame ho aperto e quindi mi regolo di conseguenza, ma ci sarebbe un sistema per poter gestire meglio la cosa?
    Cosa c'è di "differente"? Quello che è importante in questi casi è sapere/stabilire cosa non cambia e cosa cambia perché è specifico.

    La classe del internal frame è solo una? L'aspetto grafico non cambia? Se fosse così, cosa cambia? Cambia il comportamento nei confronti dei dati? E se sì, in che modo?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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