Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Cool81
    Registrato dal
    Dec 2008
    Messaggi
    160

    Aggiornare i dati di un JPanel contenuto in JFrame da un altro JFrame

    Salve,

    ennesimo problema, dubbio, difficoltà, la sostanza è la stessa:

    HELP HELP HELP!

    Allora, è possibile aggiornare i dati contenuti in un JPanel che a sua volta è contenuto nel JFrame principale da un altro JFrame?

    Cerco di spiegarmi meglio, dal JFrame secondario è possibile modificare dei dati che dovrebbe poi essere visualizzati subito nel JPanel del JFrame principale.

    Dopo che nel JFrame secondario, l'utente ha inserito i dati che ritiene necessari, clicca su un bottone Salva. Questo il codice che ho scritto:

    codice:
    private void save_buttonActionPerformed(java.awt.event.ActionEvent evt) {                                            
            try {
                // Questo metodo salva i dati modificati e ricrea il file XML aggiornato
                ......
                boolean b_update = contactsManager.updateContact(contact);
                if (b_update) {      
                    JOptionPane.showMessageDialog(null, LanguageResource.getText("message.contact.update"));
                    firstFrame.dispose();
                    JOptionPane.showMessageDialog(null, LanguageResource.getText("messagge.attempt"));
                    try {
                            Main.main(null);
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                } else {
                    JOptionPane.showMessageDialog(null, LanguageResource.getText("error.generic"));
                }
                dispose();
            } catch (ConnectException ex) {
                JOptionPane.showMessageDialog(null, LanguageResource.getText("error.connection.refused"));
            }
    Così facendo però, l'applicazione si riavvia completamente ripartendo quindi dal login.

    Ho letto che mi poteva essere utile questa discussione ed infatti nel JFrame secondario mi porto dietro un'istanza sia del JFrame principale che del JPanel, ma poi quali metodi devo richiamare?

    Grazie, ciao

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

    Re: Aggiornare i dati di un JPanel contenuto in JFrame da un altro JFrame

    Originariamente inviato da Cool81
    Allora, è possibile aggiornare i dati contenuti in un JPanel che a sua volta è contenuto nel JFrame principale da un altro JFrame?
    Sicuramente è possibile. Ma come ripeto spesso, queste sono più che altro questioni di "design" delle classi. Non è una questione "tecnica".

    Hai il frame principale A che contiene il pannello P. E hai un frame B da cui vuoi settare dei dati su P.
    Per iniziare: B che cosa "sa" di A?? Chiaramente dovrebbe avere come minimo un reference ad A. Ora: per B è importante "sapere" che i dati da aggiornare sono in un pannello? Che relazione c'è tra le due entità B e P??
    Se non ci sono particolari indicazioni/necessità, sarebbe appropriato che il frame A esponesse un metodo per settare i dati. Sarà compito suo passarli poi al pannello. B quindi non dovrebbe "sapere" nulla del pannello ma solo di A. Questo è un possibile design.

    Ripeto: sono questioni di "design". E purtroppo vedo spesso che sono le più bistrattate/ignorate ....
    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 L'avatar di Cool81
    Registrato dal
    Dec 2008
    Messaggi
    160
    E sono pienamente d'accordo con te.

    Ma secondo te quello che ti sto per esporre potrebbe essere una soluzione.

    Nel frame principale, cliccando un bottone creo il frame secondario, al cui costruttore passo il frame principale e il panel contenuto in quest'ultimo.

    Se nel panel implemento un metodo che mi fa il refresh di quello che mi occorre, posso richiamare questo metodo nel frame secondario?

    Metto il codice. Questo è quello presente nel frame principale:

    codice:
    private void editProfileActionPerformed(java.awt.event.ActionEvent evt) {                                            
           EditUser_JFrame editUser = new EditUser_JFrame(firstFrame, this);
           editUser.setVisible(true);
        }    
    
    public void refreshPanel(Contact c){
    
            //Devo fare il refresh
            telContact.setText(c.getTel());
            sedeContact.setText(c.getLocation());
            ...
        }
    e nel frame secondario ho
    codice:
    public class EditUser_JFrame extends javax.swing.JFrame {
    
        private static JFrame firstFrame = null;
        private static JPanel firstPanel = null;
    
        /** Creates new form User_JFrame */
        public EditUser_JFrame(JFrame frame, JPanel panel) {
    
            firstFrame = frame;
            firstPanel = panel;
            initComponents();
            ....
            }
    
    private void save_buttonActionPerformed(java.awt.event.ActionEvent evt) {                                            
            try {
                .....
                
                firstPanel.refreshPanel(contact );
    
                ....
             }
             catch(){
                .......
             }
    Ma mi dà errore su lla chiamata al metodo refreshPanel(contact)...perchè?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Cool81
    Ma mi dà errore su lla chiamata al metodo refreshPanel(contact)...perchè?
    Perché la variabile firstPanel è di tipo JPanel ... che ovviamente non ha un refreshPanel()!!!

    Tecnicamente dovresti dichiarare quel reference con il tipo della tua classe che estende JPanel! (idem nel costruttore quando lo passi). Insomma ... quel pannello non lo devi vedere solo come JPanel ma proprio della TuaClasse!

    Ma a parte questo, torniamo alle questioni di design, la cosa che devi chiederti è: il frame secondario deve proprio "sapere" del pannello??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Cool81
    Registrato dal
    Dec 2008
    Messaggi
    160
    Penso di sì perchè il frame principale contiene una lista di contatti e quello secondario permettere di modificare i dati riguardo il proprio profilo che quindi poi devo poter essere subito aggiornati anche in quello principale. t pare una ragione valida?

    Cmq ho risolto in questo caso il problema implementando un metodo che appunto mi refresh degli elementi che mi interessano. Poi richiamo questo metodo sull'oggetto che passo come parametro al frame secondario.

    In altri casi, però, ad esempio quando sempre da un frame secondario l'utente impostava le proprie preferenze ad esempio per la lingua, ho richiamato il metodo main() facendo quindi riavviare proprio l'applicazione.

    Certo questa soluzione nn m piace molto e nn credo neanche che sia del tutto corretta. L'alternativa quale sarebbe stata: implementare anche in questo caso un metodo refresh? ma nel caso della lingua sn quindi tutti gli elementi che dovrei refreshare.

    Oppure avrei dovuto ricorrere ad un Jdialog modale che chiuso il quale mi rifletteva le scelte sul componente parente?

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.