java गतिशील जेसीएमबोबॉक्स




swing jcombobox (2)

हां, बस प्रत्येक सेट के लिए एक setModel() , और setModel() को JComboBox2 समय JComboBox1 setModel() सेट करें

परिशिष्ट: उदाहरण के लिए,

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());
    }
}

मैंने डेटा (स्ट्रिंग) का पालन किया है:

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

मैं दो JComboBox (JComboBox1, JComboBox2) बनाना चाहूंगा ताकि JComboBox1 में कोर्स 1, कोर्स 2, कोर्स 3, आदि शामिल हों।

अगर मैं चुनता हूं, तो कहें, कोर्स 2 जेसीम्बोबोक्स 1 से संबंधित बी 1, बी 2, बी 3, बी 4 को जेसीम्बो बॉक्स 2 में पॉपुल किया जाना चाहिए।

इसे कैसे कार्यान्वित करें? बहुत धन्यवाद।


हाँ। आप पहले JComboBox में परिवर्तन ईवेंट श्रोता को जोड़ सकते हैं जो दूसरे JComboBox के मूल्यों को अपडेट करता है।

कुछ इस तरह

// first comboBox
final JComboBox courseBox = new JComboBox(
                               new String[]{"Course 1", "Course 2", "Course 3"});

final JComboBox box2 = new JComboBox();

// Now listen for changes
courseBox.addActionListener(new ActionListener(){
   void actionPerformed(ActionEvent e){
       if(courseBox.getSelectedItem().equals("Course 1")){
           // we know that the user picked "Course 1", now change box2 to match
           // first clear everything
           box2.removeAllItems();
           // now add back relevant values
           box2.addItem("A1");
           box2.addItem("A2");
       }else if(...){
           // ...
       }
   }
});