2010-07-07 22 views
9

ben şu var verileri (String):Dinamik JComboBoxes

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

İki JComboBox (JComboBox1, JComboBox2) oluşturmak istiyorum JComboBox1 vb Course1, Course2, Course3,

içerecek şekilde

JComboBox1'den Course2'yi seçerseniz, ilgili B1, B2, B3, B4'ün JComboBox2'de doldurulması gerekir.

Bu nasıl uygulamak? Çok teşekkürler.

+0

JList' 'için benzer bir örnek incelenir [buradan] (http://stackoverflow.com/q/41514529/230513). – trashgod

cevap

21

gibi

şey Evet, sadece her set için bir DefaultComboBoxModel oluşturmak ve JComboBox2 zaman JComboBox1 değişiklikleri setModel() yapmak.

Ek: Örneğin,

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

Yanıtladığınız için teşekkürler, bu çok iyi çalışıyor. –

+0

@Pujan Srivastava: Rica ederim. – trashgod

+3

Veya Harita kullanabilirsiniz. 1+ –

3

Evet. İkinci JComboBox'un değerlerini güncelleyen ilk JComboBox'a bir değişiklik olay dinleyicisi ekleyebilirsiniz. Bu

// 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

Bu gerçekten * ilkel ... – vemv