Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Resettare e riscrivere JComboBox

    Ciao!

    Ho spulciato un po' il forum è ho sempre trovato problemi simili ma non identici a quello che sto per proporre:

    Vorrei realizzare una funzione che svuota una comboBox e poi la ripopola in base a un array passato come parametro. Ho qualche problema a realizzare l'ultima parte, non so quale metodo chiamare, anche se sono certo che esista, dato che con un costruttore Combo posso passare un array:

    codice:
    private void svuotaPopola(javax.swing.JComboBox combo, String[] arr){
          combo.removeAll();
          combo.riempi(arr);
    }
    Come posso fare?
    Altra cosa: come si fa ad associare un valore deciso da me ai vari elementi della Combo (come in HTML)? Ho letto che devo creare un array di array, nel quale un elemento sia di tipo int. Ma quindi Java si accorge da solo di questo o ho capito male io?

    Grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Per la prima domanda, fai un ciclo for sugli elementi dell array e ogni volta chiama
    codice:
    combo.addItem(array[i])
    Per la seconda domanda, se ho capito tu vuoi visualizzare una descrizione, ma, quando leggi l'elemento selezionato, leggere un valore associato alla descrizione pero' diverso dalla descrizione stessa.
    Puoi procedere cosi'. Primo la JComboBox vuole degli oggetti. Quindi tu ti crei una classe ComboObject (chiamala come vuoi)
    codice:
    public class ComboItem{
       private String name;
       private String value;
    
       public ComboItem(String name, String value) {
          this.name = name;
          this.value = value;
       }
    
       public String getName() {
          return name;
       }
    
       public String getValue() {
          return value;
       }
    
       public String toString() {
          return name; //Importante perche' la combobox stampa il toString degli oggetti
       }
    }
    Crei la comboBox e gli passi elementi di tipo ComboItem. A quel punto hai la combobox che ti visualizza le tue stringhe, ma ha associato ad ogni riga un oggetto contenente anche il secondo valore, che poi e' quello che t'interessa leggere ma non visualizzare nella combo.
    Per ottenere il valore fai
    codice:
    ComboItem item = (ComboItem)combo.getSelectedItem();
    String value = item.getValue();
    Non so se c'e' un metodo piu' furbo per farlo, ma guardando le API, non vedo soluzioni piu' immediate. Ciao.

  3. #3

  4. #4
    Altra domanda del genere:
    a questo punto come faccio a verificare se la combo è piena e un suo elemento è stato selezionato?

    Ho provato così, ma questo genera un'eccezione...

    codice:
        private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
            if((ComboItem)jComboBox1.getSelectedItem()!=null){

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    che eccezione ti da?

  6. #6
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer
    ...
    ...
    E poi tutti gli altri elementi grafici.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Leggo un "Integer" nell'eccezione. Viene sollevata in quel punto li'? Se non e' lunga, puoi postare tutta l'eccezione, il pezzo di codice in cui riempi la comboBox e il codice del listener.

  8. #8
    Ehm... Credo di aver fatto un po' di casino. Ho modificato la tua classe facendo in modo che ci sia una stringa visualizzata e un intero come valore che serve a me... E' sbagliato, eh?

    Qui sotto il codice... Qualche idea?

    Grazie!

    codice:
    // Grazie a simo7784
    public class ComboItem{
       private String name;
       private int value;
    
       /** Permette di associare una stringa (che sarà visualizzata nella comboBox) a un valore**/
       public ComboItem(String name, int value) {
          this.name = name;
          this.value = value;
       }
    
       public String getName() {
          return name;
       }
    
       public int getValue() {
          return value;
       }
    
       public String toString() {
           //la combobox stampa il toString degli oggetti
          return name;
       }
    }
    codice:
    L'eccezione:
    
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer
            at GUI.NewJFrame.jComboBox1ActionPerformed(NewJFrame.java:371)
            at GUI.NewJFrame.access$000(NewJFrame.java:16)
            at GUI.NewJFrame$1.actionPerformed(NewJFrame.java:101)
            at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1197)
            at javax.swing.JComboBox.contentsChanged(JComboBox.java:1268)
            at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:100)
            at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:88)
            at javax.swing.DefaultComboBoxModel.addElement(DefaultComboBoxModel.java:126)
            at javax.swing.JComboBox.addItem(JComboBox.java:690)
            at GUI.NewJFrame.propOf(NewJFrame.java:627)
            at GUI.NewJFrame.setUp(NewJFrame.java:434)
            at GUI.NewJFrame.jButton2ActionPerformed(NewJFrame.java:401)
            at GUI.NewJFrame.access$200(NewJFrame.java:16)
            at GUI.NewJFrame$3.actionPerformed(NewJFrame.java:136)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
            at java.awt.Component.processMouseEvent(Component.java:5501)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
            at java.awt.Component.processEvent(Component.java:5266)
            at java.awt.Container.processEvent(Container.java:1966)
            at java.awt.Component.dispatchEventImpl(Component.java:3968)
            at java.awt.Container.dispatchEventImpl(Container.java:2024)
            at java.awt.Component.dispatchEvent(Component.java:3803)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
            at java.awt.Container.dispatchEventImpl(Container.java:2010)
            at java.awt.Window.dispatchEventImpl(Window.java:1778)
            at java.awt.Component.dispatchEvent(Component.java:3803)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
            at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
    
    ---------------------------
    
    Questo per riempire la combo:
    
    	caricaCombo(jComboBox1,arrString,arrInt, nEd);
    
    
        public void caricaCombo(javax.swing.JComboBox combo, String arrS[], int arrI[], int nEd){
            ComboItem ci[] = new ComboItem[nEd];
            
            if(nEd != 0){
                combo.setEnabled(true);
                combo.removeAllItems();
                //Riempio la comboBox
                for(int i = 0; i< nEd; i++){
                    ci[i] = new ComboItem(arrS[i],arrI[i]);
                    
                    combo.addItem(ci[i]);
                }
            }
        }
    
    ---------------------------
    Action
    
        private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
            int num = 0;
            if((ComboItem)jComboBox1.getSelectedItem()!=null){
                jComboBox2.setEnabled(true);
                ComboItem item = (ComboItem)jComboBox1.getSelectedItem();
                num = item.getValue();
    	    ... Lavoro con num...
            }
        }

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    No, puoi mettere anche un int. La riga 371 della classe NewJFrame, qual'e'?

  10. #10
    Ciao!

    Dunque la riga 371 è questa:
    if((ComboItem)jComboBox1.getSelectedItem()!=null){

    Gli dà fastidio il cast con ComboItem. Gli dà fastidio perchè, per un motivo che ancora non sono riuscito a capire, la combo viene riempita e con la stringa e con il valore intero associatogli.
    Insomma, io vorrei aggiungere l'elemento di stringa "prova" e id 17, e invece viene inserita la stringa con associato l'id 17, ma anche l'intero 17... Il problema "logico" sta quindi, secondo me, in caricaCombo()...

    Bye!

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.