Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    4

    [SWING] Aggiungere dinamicamente elementi a JList da classe diversa

    Ciao a tutti!

    Ho la necessità di aggiungere a una JList (creata ad esempio su una Form1) da un'altra classe (che è, sempre ad esempio, una Form2).

    Ora la situazione è questa:

    Su una classe "generale" che fa da main e avvia la classe form1 ho dichiarato come public il mio modello (preciso che questa classe "generale" NON è un jform):

    codice:
    public DefaultListModel modello = new DefaultListModel();
    public JList lista = new JList (modello);
    Dal form1 creo un jlist (pubblica, public javax.swing.JList jList1; ) e richiamo il modello (uso NetBeans e gli ho impostato manualmente la creazione)

    Prima però pecifico dal form1 la classe generale:
    codice:
        DesktopApplication1 princip = new DesktopApplication1();
    In private void initComponents netbeans mi ha creato questo:
    codice:
    jList1 = princip.lista;
    Ci creo un bottone e ci metto del codice di esempio per aggiungere gli elementi:
    codice:
           princip.modello.addElement("aaa");

    OK! Tutto perfetto! Funziona!

    Ora faccio le stesse identiche cose dal form2:
    codice:
        DesktopApplication1 princip = new DesktopApplication1();
    e voglio aggiungere gli elementi nella jlist del form1 da un bottone che risiede NEL form2:
    codice:
           princip.modello.addElement("aaa");
    Ma non funziona!

    Dove sbaglio?

    Grazie mille anticipatamente!

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

    Re: [SWING] Aggiungere dinamicamente elementi a JList da classe diversa

    Originariamente inviato da merto
    Ho la necessità di aggiungere a una JList (creata ad esempio su una Form1) da un'altra classe (che è, sempre ad esempio, una Form2).
    Quando ci sono queste necessità di interazione tra classi, bisogna sempre prestare molta attenzione al "design". Mettere campi di istanza 'public' o peggio mettere campi 'static' e 'public' NON è la soluzione migliore.

    Originariamente inviato da merto
    Su una classe "generale" che fa da main e avvia la classe form1 ho dichiarato come public il mio modello (preciso che questa classe "generale" NON è un jform):

    codice:
    public DefaultListModel modello = new DefaultListModel();
    public JList lista = new JList (modello);
    Male il 'public'.

    Originariamente inviato da merto
    Dal form1 creo un jlist (pubblica, public javax.swing.JList jList1; ) e richiamo il modello (uso NetBeans e gli ho impostato manualmente la creazione)

    Prima però pecifico dal form1 la classe generale:
    codice:
        DesktopApplication1 princip = new DesktopApplication1();
    In private void initComponents netbeans mi ha creato questo:
    codice:
    jList1 = princip.lista;
    Ci creo un bottone e ci metto del codice di esempio per aggiungere gli elementi:
    codice:
           princip.modello.addElement("aaa");

    OK! Tutto perfetto! Funziona!

    Ora faccio le stesse identiche cose dal form2:
    codice:
        DesktopApplication1 princip = new DesktopApplication1();
    e voglio aggiungere gli elementi nella jlist del form1 da un bottone che risiede NEL form2:
    codice:
           princip.modello.addElement("aaa");
    Ma non funziona!

    Dove sbaglio?
    Così .... a occhio ... senza vedere il codice completo (e senza avere capacità paranormali ) potrei dire che istanziando DesktopApplication1 non stai operando sullo stesso dell'altro .... ma così come l'hai spiegato è confuso ....
    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 2009
    Messaggi
    4
    Ok.. allora mettiamolo in modo più semplice..

    Devo aggiungere degli elementi a una JList su un form (chiamiamolo Form1) da, ad esempio, un pulsante che risiede nella Form2.

    Mettiamo il caso che il codice "interno" per aggiungere delle righe (ad esempio un bottone che risiede nello stesso form) sia:

    Codice di creazione dei JList
    codice:
    javax.swing.DefaultListModel model = new javax.swing.DefaultListModel();
    
    public javax.swing.JList lstLog;
    lstLog.setModel(model);
    Codice di inserimento da una procedura:
    codice:
     public void logger(String messaggio) {
    
    //inserisco una riga all'inizio
    model.insertElementAt(messaggio, 0);
    
    //Lo rendo visibile.
    lstLog.setSelectedIndex(index);
    lstLog.ensureIndexIsVisible(index);
    
      }
    Come faccio a inserire una riga del lstLog in Form1 DA un bottone in una Form2?

    Si è capito? :P

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da merto
    Come faccio a inserire una riga del lstLog in Form1 DA un bottone in una Form2?
    Semplicemente facendo in modo che Form2 abbia un reference al model del JList.
    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
    Registrato dal
    Feb 2009
    Messaggi
    4
    Ok, premessa che mi sto avvicinando solo adesso a Java.
    Comunque io avevo provato con questo...

    Sia così modificando il model:

    codice:
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
           Form1 form1;
           form1 = new Form1();
           form1.model.insertElementAt("ciao", 0);     }

    Sia così, richiamando la procedura

    codice:
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
           Form1 form1;
           form1 = new Form1();
           form1.logger("ciao");     }
    Dove sbaglio?

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    4
    Aggiungo che ovviamente appena instanzio il form1 me ne visualizza un altro...

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da merto
    Aggiungo che ovviamente appena instanzio il form1 me ne visualizza un altro...
    Allora .... quel tuo Form2 dove viene istanziato?? Dall'interno di Form1?? Puoi passare in qualche modo (tramite costruttore o metodo) a Form2 il reference al model del JList?? La questione sta tutta qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava 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 © 2025 vBulletin Solutions, Inc. All rights reserved.