Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315

    [Swing] JComboBox con doppia informazione

    Salve, ho due stringhe: una che rappresenta un ID e l'altra che rappresenta l'INFORMAZIONE.
    Vorrei fare in modo che la JComboBox mi visualizzasse l'informazione ma che cmq mantenesse l'id.
    In questo l'utene seleziona un item ed io acquisisco l'id.

    Quale il modo migliore per farlo?

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

    Re: [Swing] JComboBox con doppia informazione

    Originariamente inviato da koala81
    Salve, ho due stringhe: una che rappresenta un ID e l'altra che rappresenta l'INFORMAZIONE.
    Vorrei fare in modo che la JComboBox mi visualizzasse l'informazione ma che cmq mantenesse l'id.
    In questo l'utene seleziona un item ed io acquisisco l'id.

    Quale il modo migliore per farlo?
    Se non hai usato cose particolari (model o renderer specifici), un JComboBox contiene semplicemente un insieme di Object. Quello che visualizza negli elementi a video è il risultato del toString() sugli oggetti.

    Ti basta creare una TuaClasse che contiene id+informazione. Nel toString() fai ritornare la informazione che quindi sarà visualizzata. Quando prendi l'item selezionato, hai ovviamente un oggetto della TuaClasse, quindi .... beh, ci fai quello che vuoi.
    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
    Nov 2005
    Messaggi
    315
    Ottimo!!!
    Grazie...

  4. #4

    ....

    scusa ma io non ho capito bene...potresti portare un esempio??
    Grazie

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

    Re: ....

    Originariamente inviato da FilippoCSM
    scusa ma io non ho capito bene...potresti portare un esempio??
    Grazie
    Se ti riferisci a quello che dicevo con: "Ti basta creare una TuaClasse che contiene id+informazione. Nel toString() fai ritornare la informazione che quindi sarà visualizzata. Quando prendi l'item selezionato, hai ovviamente un oggetto della TuaClasse, quindi .... beh, ci fai quello che vuoi." è molto semplice.

    Definisci una classe con N proprietà ... quelle che ti pare. Visto che per default il renderer di un JList/JComboBox si basa sul toString() degli elementi, fai ritornare una stringa (composta con una o più proprietà ... come ti pare) che è poi quella che sarà visualizzata nel JList/JComboBox. Ma ovviamente gli oggetti nel model sono comunque quelli della tua classe, che puoi sempre estrarre ed usare "vedendoli" come oggetti della tua classe e quindi potendone settare/leggere le sue N proprietà.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    ..La teoria l'ho capita, ma essendo poco esperto di java, non
    ho capito la pratica.
    La classe l'ho fatta,
    class {String id;String Nome}
    E poi faccio
    MyJcbox.additem(myclass.Nome);
    o no?
    E l'Id dove lo metto?
    O devo fare una stringa concatenata con id e nome?
    E poi come lo tiro fuori l'id?
    L'id mi serve per aprire il databse e legge il record ID che
    se ordine alfabeticamente il Jcombobox non è in ordine di record...
    Grazie
    Ciao

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da FilippoCSM
    La classe l'ho fatta,
    class {String id;String Nome}
    E che è 'sta roba?? Tutto qui? Costruttore/i? Metodi getter/setter? toString()?? niente...nada???

    Originariamente inviato da FilippoCSM
    E poi faccio
    MyJcbox.additem(myclass.Nome);
    o no?
    No.

    Originariamente inviato da FilippoCSM
    E l'Id dove lo metto?
    È nel tuo oggetto, no?

    Originariamente inviato da FilippoCSM
    O devo fare una stringa concatenata con id e nome?
    No.

    Originariamente inviato da FilippoCSM
    E poi come lo tiro fuori l'id?
    Sempre dal tuo oggetto, no?

    Originariamente inviato da FilippoCSM
    se ordine alfabeticamente il Jcombobox non è in ordine di record...
    Il model di default (che è DefaultComboBoxModel) è "mutabile" (puoi aggiungere/rimuovere elementi) ed è semplicemente una sequenza di elementi ordinata per indice 0,1,2.... (non per contenuto).

    Se passi e aggiungi al model dei dati già ordinati secondo il criterio che vuoi, è un conto. Se vuoi che sia il model a mantenere ordinati gli elementi (es. tu inserisci "topolino" poi dopo "pippo" ma vuoi che si dispongano come "pippo" e dopo "topolino") è un altro conto e devi implementare tu un "tuo" model.



    codice:
    public class MioElemento {
        private int id;
        private String nome;
    
        public MioElemento(int id, String nome) {
            this.id = id;
            this.nome = nome;
        }
        
        public int getId() { return id; }
        public String getNome() { return nome; }
        
        // se vuoi, anche i metodi "setter" ma per questo esempio non li ho messi
        
        public String toString() {
            return nome;
        }
    }
    Poi ad esempio:

    codice:
    JComboBox comboBox = new JComboBox();
    
    comboBox.addItem(new MioElemento(123, "pippo"));
    comboBox.addItem(new MioElemento(456, "topolino"));
    Ciò che verrà visualizzata è per default la stringa fornita dal toString() degli oggetti, quindi nel caso sopra solo il nome.

    Chiaramente puoi in ogni momento ottenere l'elemento i-esimo o quello selezionato ad esempio con getItemAt() o getSelectedItem(). Questi metodi ritornano come tipo un Object ma tu sai che gli oggetti nel model sono davvero della tua classe MioElemento, quindi ad esempio:

    codice:
    MioElemento elem = (MioElemento) comboBox.getSelectedItem();
    System.out.println(elem.getId());
    System.out.println(elem.getNome());
    Più chiaro ora?? (spero ....)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Più chiaro di così non potevi essere.
    Ho capito alcune cosette......soprattutto che devo studiarmi alcuni
    fondamentali del JAVA.
    Grazie mille.

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.