Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127

    [java-swing] refresh combo box

    salve ho il seguente problema:

    ho un pulsante il cui evento genera il caricamento di dati da un DB e relativo inserimento in una form.

    questa form è composta da vari Jtextfield ed alcuni Jcombo box.

    il primo evento inizializza i textfield ed i combo box selezionando tramite l'indice (.getSelectedIndex(int)) il corretto campo.

    nei successivi click sul pulsante , solo i textfield vengono correttamente inizializzati, i combobox invece restano invariati...

    come mai ?? avete già visto uno scenario simile con i Jcombobox ? ho provato a richiamare repaint() e updateUI() sul combobox ma niente...

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

    Re: [java-swing] refresh combo box

    Originariamente inviato da tulkas85
    i combobox invece restano invariati...
    Senza vedere il codice che hai scritto è un po' difficile dire cosa non va e il perché.
    Comunque la questione è abbastanza semplice: un JComboBox ha associato un "model" che contiene i dati più la nozione dell'elemento "selezionato". Quindi tu cosa devi fare? Cambiare i dati nel model oppure solo l'elemento selezionato?? Sono due cose diverse, ovviamente.

    Originariamente inviato da tulkas85
    ho provato a richiamare repaint() e updateUI()
    Nessuno dei due serve (il secondo poi è per tutta altra cosa ....).
    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
    Jan 2006
    Messaggi
    127
    eh il codice è lungo ed articolato...
    questi combobox insieme ai textfield vengono inseriti in un JPanel, questo Jpanel a sua volta viene aggiunto ad un secondo JPanel ed infine questo ultimo Panel và in un TabbedPane.

    cmq devo cambiare solo l'elemento selezionato.

    ad esempio :

    codice:
    //ciclo sul result Set
    
    while(rs.next())
     {
    camPane.modelCombo.setSelectedIndex(new Integer(rs.getString("firmwareVersion")));
    
    camPane.addrText.setText(rs.getString("ipAddress"));
    ....
    ...
    ...
    }
    questo while è contenuto in un action listener di un JBUTTON.

    quando il primo evento viene eseguito, tutto funziona a dovere, da questo momento in poi tutti i click sul pulsante fanno si che i textfield vengano riempiti, ma i combobox non cambiano la selezione come dovrebbero...

    se questo nn ti basta cerco di ricreare una versione leggera delle classi che entrano in gioco in questo fatto.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulkas85
    codice:
    //ciclo sul result Set
    
    while(rs.next())
     {
    camPane.modelCombo.setSelectedIndex(new Integer(rs.getString("firmwareVersion")));
    Allora, premesso che così se hai più righe nel result set, ad ogni riga cambi l'indice .... morale: alla fine del ciclo rimane l'indice selezionato dall'ultima riga.

    Ma a parte questo, il campo "firmwareVersion" contiene un valore numerico intero? Come hai fatto, cioè prendere un String dal campo, parsarlo istanziando un Integer e poi tramite unboxing di Java 5 ottenere un int da passare a setSelectedIndex() ... beh, tecnicamente è corretto. Ma è un giro inutile!

    Prendi il campo con getInt() e passalo direttamente!!! E comunque il valore hai verificato che sia un indice corretto nel range 0...N dei dati nel model??
    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
    Jan 2006
    Messaggi
    127
    grazie per il getInt effettivamente meglio così.

    cmq si il valore è nel range del jcombobox, io lo istanzio con un array di stringhe.

    la storia del ciclo, hai ragione, il fatto è ke nn ho bisogno di quel ciclo, xkè il resulset è di un solo record, infatti ora ho tolto il while.

    resta il fatto del jcombobox che nn si aggiorna

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulkas85
    resta il fatto del jcombobox che nn si aggiorna
    Se il getInt() ritorna un valore appropriato come indice per il tuo combo box e se quel modelCombo fa riferimento ad un JComboBox visualizzato nella tua interfaccia utente .... per quello che posso sapere e dirti io mi sembra tecnicamente del tutto corretto e dovrebbe funzionare. Ma probabilmente c'è dell'altro che non posso sapere/vedere così in questo momento ....

    E inoltre ti dico anche che fare cose del tipo: qualcosa.unCampo.unMetodo() o ad esempio qualcosa.getPannello().getComponenteXYZ().unMetodo () generalmente è il sintomo che il "design" delle classi fa un tantino "acqua" .... perché c'è troppo "accoppiamento" tra le classi che quindi devono "sapere" dettagli interni su campi, componenti ecc... che invece, concettualmente, non dovrebbero sapere.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    eh lo sò, alla fine ho risolto creando un jframe apposito per il panel della form...

    purtroppo da autodidatta sbatacchio un pò qui e un pò la le info che mi servono, quando mi servono.

    il mio java è un ibrido tra programmazione procedurale ed ad oggetti...

    ho difficoltà a separare l'interfaccia con le funzionalità legate agli eventi, quindi alla fine le mie classi sono piene di action listener annidati che interagiscono con l'interfaccia tramite i campi pubblici di quest'ultima.

    il tutto è tanto perverso che faccio fatica anche a spiegarlo

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.