Dynamic JComboBoxes

后端 未结 2 1116
天命终不由人
天命终不由人 2020-11-22 04:27

I have following data (String):

Course1: A1
Course1: A2
Course2: B1
Course2: B2
Course2: B3
Course2: B4
Course3: C1
Course3: C2

I\'d like t

2条回答
  •  旧巷少年郎
    2020-11-22 05:01

    Yes, simply create a DefaultComboBoxModel for each set, and do setModel() on JComboBox2 when JComboBox1 changes.

    Addendum: For example,

    import java.awt.EventQueue;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.ComboBoxModel;
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class ComboTest extends JPanel implements ActionListener, Runnable {
    
        private final JComboBox combo1 = new JComboBox(
            new String[]{"Course 1", "Course 2", "Course 3"});
        private final JComboBox combo2 = new JComboBox();
        private ComboBoxModel[] models = new ComboBoxModel[3];
    
        public ComboTest() {
            models[0] = new DefaultComboBoxModel(
                new String[]{"A1", "A2"});
            models[1] = new DefaultComboBoxModel(
                new String[]{"B1", "B2", "B3", "B4"});
            models[2] = new DefaultComboBoxModel(
                new String[]{"C1", "C2"});
    
            combo2.setModel(models[0]);
            this.add(combo1);
            this.add(combo2);
            combo1.addActionListener(this);
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            int i = combo1.getSelectedIndex();
            combo2.setModel(models[i]);
        }
    
        @Override
        public void run() {
            JFrame f = new JFrame("ComboTest");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.add(this);
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new ComboTest());
        }
    }
    

提交回复
热议问题