Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di provasp
    Registrato dal
    Sep 2002
    Messaggi
    160

    [java] Ricaricare un JComboBox

    Ho un JComboBox in una finestra che carica un Array di Nominativi da un DB; nella stessa finestra ho un JTextField nel quale posso modificare il nominativo che ho selezionato.
    L'aggiornamento nel Database funziona correttamente, ma come posso ricaricare il JComboBox con il nome che ho modificato?

    Se esistesse un metodo mioComboBox.reload() sarebbe perfetto, altrimenti posso svuotare la lista con mioComboBox.removeAllItems();, ma come faccio a reinserire i valori dell'array nella lista?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Effettivamente ho notato la mancanza di un metodo utile come il setData() di JList... :master: Molto strano.

    Comunque, puoi agire nei seguenti 2 modi:

    1) (Più lento, scomodo) Rimuovi tutti gli elementi. Poi riesegui la query e inserisci, uno ad uno, tutti gli elementi restituiti utilizzando il metodo addItem()

    2) (Più veloce) Semplicemente ricostruisci il JComboBox e lo sostituisci a quello vecchio, utilizzando di nuovo la query sul DB.:
    codice:
    tuoCombo = new JComboBox( nuoviDati );
    dove nuoviDati è il nuovo Array (o Vector) di dati restituiti dalla query.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di provasp
    Registrato dal
    Sep 2002
    Messaggi
    160
    Ma per sostituire quello vecchio come devo fare? utilizzo mioComboBox.hide() per eliminarlo e lo ricreo con un nuovo nome?

  4. #4
    Utente di HTML.it L'avatar di provasp
    Registrato dal
    Sep 2002
    Messaggi
    160
    Io ho provato con

    codice:
    mioComboBox.hide();
    
    mioComboBox = new JComboBox(nuoviDati[]);
    
    mioPanel.add(mioComboBox);
    Sembrerebbe funzionare, solamente che il ComboBox sparisce e riappare quello nuovo solamente quando clicco sulla finestra o la ridimensiono.
    Forse non va bene utilizzare hide() oppure c'è un altro comando che fa un refresh?

  5. #5
    il metodo dovrebbe essere repaint().
    se fatto sulla finestra dovrebbe ridisegnare tutti gli oggetti al suo interno...
    Non l'ho mai testato quindi non assicuro niente...

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Sì, devi utilizzare il metodo repaint(), meglio se preceduto da un doLayout(). Non serve utilizzare il metodo hide(), quanto, piuttosto, utilizzerei il metodo remove() tanto l'oggetto viene ricreato:
    codice:
    mioPanel.remove( mioComboBox );
    mioComboBox = new JComboBox( nuoviDati[] );
    mioPanel.add( miocomboBox );
    doLayout();
    repaint();
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di provasp
    Registrato dal
    Sep 2002
    Messaggi
    160
    Anche così ottengo sempre lo stesso problema, la ComboBox sparisce e riappare solamente se sposto la finestra o la ridimensiono.
    Mi sono scordato di dire che questa finestra è un JInternalFrame contenuto in un JDesktopPane, magari cambia qualcosa...

    Ma i metodi doLayout(); e repaint(); ricreano l'intera finestra?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    doLayout() forza il lay-out di tutti i componenti del Container su cui è chiamato (praticamente li dovrebbe ridisegnare e ridimensionare).

    repaint(), invece, richiama il metodo pain() di tutti i componenti in modo da disegnarli a video.

    Prova a chiamare il doLayout() e il repaint() anche sul JComboBox... purtroppo i problemi di questo tipo non sono così immediati da risolversi... io l'ho risolto richiamando il doLayout() anche sul componente appena ricostruito (quindi sul JComboBox).

    Ecco, quindi, l'esempio:
    codice:
    mioPanel.remove( mioComboBox );
    mioPanel.doLayout();
    mioPanel.repaint();
    
    mioComboBox = new JComboBox( nuoviDati[] );
    mioPanel.add( mioComboBox );
    miocomboBox.doLayout();
    mioPanel.doLayout();
    mioPanel.repaint();
    doLayout();
    repaint();
    E' un po' una forzatura, ma dovrebbe andare.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it L'avatar di provasp
    Registrato dal
    Sep 2002
    Messaggi
    160
    Non funziona ancora!

    Non so + cosa fare...

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    prova con

    validate()

    sul container del JComboBox
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.