2010-07-07 1 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에서 Course2를 선택하면 해당 B1, B2, B3, B4가 JComboBox2에 채워 져야합니다.

어떻게 구현하나요? 많은 감사.

+0

JList' '에 대한 유사한 예는 검사된다 [여기 (http://stackoverflow.com/q/41514529/230513). – trashgod

답변

21

같은

뭔가 예, 단순히 각 세트에 대한 DefaultComboBoxModel를 만들고, JComboBox2JComboBox1 변경에 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

@Pujan Srivastava : 천만에요. – trashgod

+3

또는지도를 사용할 수 있습니다. 1 + –

3

예. 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(...){ 
      // ... 
     } 
    } 
}); 
+1

그건 정말 * 원시 * ... – vemv