2010-07-07 10 views
9

मैं निम्नलिखित है डेटा (स्ट्रिंग):गतिशील JComboBoxes

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

मैं दो JComboBox (JComboBox1, JComboBox2) बनाना चाहते हैं, तो JComboBox1 Course1, Course2, Course3, आदि

जिसमें

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

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

+0

'JList' के लिए ऐसा ही एक उदाहरण जांच की है [यहां] (http://stackoverflow.com/q/41514529/230513)। – trashgod

उत्तर

21

की तरह हाँ, बस प्रत्येक सेट के लिए एक DefaultComboBoxModel बनाते हैं, और 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()); 
    } 
} 
+0

उत्तर देने के लिए धन्यवाद, यह पूरी तरह से अच्छी तरह से काम करता है। –

+0

@ पूजन श्रीवास्तव: आपका स्वागत है। – trashgod

+3

या मानचित्र का उपयोग कर सकते हैं। 1+ –

3

हां। आप पहले 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(...){ 
      // ... 
     } 
    } 
}); 
+1

यह * वास्तव में * आदिम है ... – vemv

संबंधित मुद्दे