Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    51

    [Java] Creazione di JComboBox in Modo Dinamico

    Salve,
    il problema il seguente: creata un jcombobox con una serie di elementi, ma imposta inizialemente su null, vorrei che se ne creasse un'altra appena sotto quando sulla prima viene selezionato un elemento della lista. Il processo si dovrebbe ripetere fino un massimo di 20 jcombobox. Come posso fare a creare una cosa del genere?

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

    Re: [Java] Creazione di JComboBox in Modo Dinamico

    Originariamente inviato da marcoc84
    il problema il seguente: creata un jcombobox con una serie di elementi, ma imposta inizialemente su null, vorrei che se ne creasse un'altra appena sotto quando sulla prima viene selezionato un elemento della lista. Il processo si dovrebbe ripetere fino un massimo di 20 jcombobox. Come posso fare a creare una cosa del genere?
    Per ricevere notifica della selezione di un elemento si può registrare sul JComboBox un ItemListener o un ActionListener (le differenze ci sono, a livello di informazioni fornite nell'evento).

    Per visualizzare dinamicamente le combo hai 2 possibilità: crearle tutte all'inizio ma tenerle tutte nascoste (salvo la prima) e visualizzarle solo quando serve oppure crearle proprio nuove solo nel momento in cui servono.

    Bisogna comunque vedere in quale contenitore vuoi inserirle e con quale layout manager (se ne usi uno).
    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
    Jul 2008
    Messaggi
    51
    Per completezza posto il codice interessato che avevo creato:

    codice:
    perfBox = new JComboBox(perf2); //perf2 contiene la lista degl'elementi
    perfBox.addActionListener(new ActionListener() {
    	public void actionPerformed(ActionEvent e) {
    		if(perfBox.getSelectedIndex()!=-1){
    					
    		}
    	}
    });
    perfBox.setBounds(209, 82, 131, 22);
    perfBox.setSelectedIndex(-1);
    desktopPane.add(perfBox);
    Da come si puo vedere non uso layout è ho notifica della selezione tramite l'actionPerforformed.

    Per risparmiare risorse volevo creare le jComboBox solomante quando servivano.

    Una solzione potrebbe essere quella di usare la classe DefaultComboBoxModel con qualcosa del genere:
    codice:
    ((DefaultComboBoxModel)perfBox.getModel()).addElement("...");

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da marcoc84
    Da come si puo vedere non uso layout è ho notifica della selezione tramite l'actionPerforformed.
    Fin qui, ok.
    La questione è: solo l'ultimo combo è responsabile della creazione di un nuovo combo?? (se hai 3 combo A, B, C, solo selezionando su C si crea un nuovo D). Giusto?

    Hai bisogno di tenerti una lista delle combo, giusto?? (altrimenti che ci fai con le combo poi?).

    Allora ogni combo dovrebbe avere una proprietà che indica l'indice (ti basta estendere JComboBox ed aggiungere una proprietà di tipo int).

    Il listener può essere unico, quando ricevi la notifica di selezione da un combo ne prendi l'indice e se l'indice indica che è l'ultimo allora crei un nuovo combo.
    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
    Jul 2008
    Messaggi
    51
    Originariamente inviato da andbin
    Fin qui, ok.
    La questione è: solo l'ultimo combo è responsabile della creazione di un nuovo combo?? (se hai 3 combo A, B, C, solo selezionando su C si crea un nuovo D). Giusto?

    Hai bisogno di tenerti una lista delle combo, giusto?? (altrimenti che ci fai con le combo poi?).

    Allora ogni combo dovrebbe avere una proprietà che indica l'indice (ti basta estendere JComboBox ed aggiungere una proprietà di tipo int).

    Il listener può essere unico, quando ricevi la notifica di selezione da un combo ne prendi l'indice e se l'indice indica che è l'ultimo allora crei un nuovo combo.
    Inizialmente ho solo un JComboBox, una volta che seleziono qualcosa da questo JComboBox ne viene creato un altro che non puo più essere cancellato, questo a sua volta può creare un'altro JComboBox.

    La tua soluzione sembra impeccabile, vediamo....
    Grazie.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    51
    Anche la soluzione del DefaultComboBoxModel potrebbe funzionare.

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

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame implements ActionListener {
        private JComboBox[] comboBoxes;
        private int last;
    
        public TestFrame() {
            super ("Test");
    
            setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    
            comboBoxes = new JComboBox[10];
            last = -1;
    
            Container contentPane = getContentPane();
            contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
    
            addCombo();   // combo iniziale
        }
    
        public void actionPerformed(ActionEvent e) {
            Object source = e.getSource();
    
            // Solo l'ultimo combo agisce, finchè non si è arrivati all'ultimo
            if (last < comboBoxes.length-1 && source == comboBoxes[last]) {
                addCombo();
            }
        }
    
        private void addCombo() {
            JComboBox combo = new JComboBox(new Object[] { "--scegli--", "aaa", "bbb", "ccc" });
            combo.addActionListener(this);
    
            comboBoxes[++last] = combo;
    
            getContentPane().add(combo);
            combo.requestFocusInWindow();
            pack();
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    TestFrame f = new TestFrame();
                    f.setVisible(true);
                }
            });
        }
    }
    Vedi se è più o meno quello che ti serve.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    51
    Grazie mille per il tuo aiuto.
    Ho provato la tua soluzione, ed è perfettamente quello che volevo fare.
    Ciao e di nuovo grazie.

  9. #9
    Ciao andbin,

    io ho un problema simile. Ho Bisogno di creare dei combo box dinamicamente in base ad un numero di attrubuti che gli passo dalla classe main. Vorrei una cosa così



    Oppure una cosa con i radio button così



    I valori da selezionare sono numeri interi da 1 a 5. Quindi l'utente dovrà valutare gli attribut1 x,y,z ecc,.. con un valore da 1 a 5. Quando preme OK mi deve restituire un arrey di numeri interi con le sue valutazioni.

    Possiamo pensare in alternativa anche un componente jslider da 1 a 5. non è un problema. Mi puoi aiutare. Le variabili in entrata sarebbero i numero degli attributi da valutare ( che coinciderà con numero di label e combox) e il numero nome degli stessi che andrà inserito nelle label.

    Mi dai una mano? Grazie

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.