Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Aggiornare JList da altro JFrame

    ciao a tutti!

    nel JFrame A ho una JList, che si riempie da un ArrayList<String>.
    questo ArrayList<String> si riempie prendendo la lista di file di una directory.
    e fin qui tutto ok.

    dal JFrame A richiamo un JFrame B, che ha il compito di creare dei file, che poi vanno a finire in quell'ArrayList<String>.

    la domanda è: come faccio ad aggiornare quella JList alla chiusura del JFrame B?

    per ora l'unica cosa che mi è venuta in mente è quella di passare a JFrame B la JList, ma non penso sia la soluzione migliore.

  2. #2
    ok così funziona.

    nel JFrame A:
    codice:
                    FrameB fa = new FrameB();
                    fa.setVisible(true);
                    fa.addWindowListener(new WindowAdapter() {
                        @Override
                        public void windowClosed(WindowEvent ev) {
                            riempiList();
                        }
                    });
    voi che ne dite??
    può andare??

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    voi che ne dite??
    può andare??
    Se ti limiti a ricevere la notifica della chiusura e poi fai un "reload" (che immagino voglia dire nel tuo caso svuotare e ri-riempire il model del JList, direttamente o indirettamente), di per sé è corretto ed appropriato (nel senso che le due finestre sono ben disaccoppiate e non ci sono aperture o passaggi particolari di oggetti).

    Ma non è l'unica strada.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se ti limiti a ricevere la notifica della chiusura e poi fai un "reload" (che immagino voglia dire nel tuo caso svuotare e ri-riempire il model del JList, direttamente o indirettamente), di per sé è corretto ed appropriato (nel senso che le due finestre sono ben disaccoppiate e non ci sono aperture o passaggi particolari di oggetti).

    Ma non è l'unica strada.
    si, in questo non c'è passaggio di oggetti.
    semplicemente alla chiusura di Frame B aggiorno il model di JList.

    se non ti è di troppo disturbo, posso chiederti in quale altro modo potrei fare?
    anche a livello teorico se non hai un esempio pratico!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    posso chiederti in quale altro modo potrei fare?
    Se il frame B deve poter fare qualcosa in modo "attivo" per cambiare la lista che ha il frame A, allora ci sono almeno 2 opzioni:

    a) Al frame B passi il model (attenzione, non il componente JList, non sarebbe buona cosa). Chiaramente il frame B può fare sul model tutto ciò che la classe del model offre di pubblico. Se frame B sa di ricevere un DefaultListModel, può fare tutto quello che DefaultListModel permette.

    b) Al frame B passi un oggetto di una tua interfaccia Xyz che ha i soli metodi che vuoi permettere per aggiornare la lista. La interfaccia può essere implementata nel model (se è uno tuo specifico, sotto il tuo controllo) oppure in una classe anche nascosta che accede al model. Il punto è che frame B "vede" solo la interfaccia. Se avesse solo un metodo es. aggiungiFile(String), solo questo può fare.

    Se frame B invece non compie nulla di attivo per cambiare la lista, allora si può:

    c) in frame B metti un metodo es. getFileAggiunti() e il frame A lo usa appena riceve notifica che frame B si è chiuso.

    d) definisci un nuovo vero e proprio listener (nello stile degli altri di AWT/Swing) es. FileCreationListener con un es. fileCreated(FileCreationEvent).
    Il frame A implementa in qualche modo il listener e poi lo "registra" sul frame B. Frame B notifica solo la creazione, poi frame A fa quello che vuole.


    Ci potrebbero essere altri scenari possibili. Questi sono solo alcuni che mi vengono in mente. Come vedi è sempre tutto relativo ad un metodo X che viene invocato su un oggetto Y. Quello che varia e che dà origine ad un design differente è il chi invoca cosa su quale oggetto e con quale livello di astrazione riguardo il tipo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    ok perfetto!
    mi è abbastanza chiaro, lo terrò a mente per i prossimi progetti!
    grazie mille per la disponibilità!

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.