2016-08-29 1 views
1

여기 내 코드입니다 :다른 JComboBox의 선택에 따라 JComboBox에 값을로드하는 방법은 무엇입니까?

JComboBox unity=new JComboBox(); 
unity.setBounds(430,280,140,25); 
unity.addItem("Pakistan"); 
unity.addItem("China"); 
unity.addItem("America"); 
unity.addItem("Japan"); 
unity.addItem("Bangladesh"); 
unity.addItem("Srilanka"); 
unity.addItem("India"); 
unity.addItem("Turkey"); 
unity.addItem("UK"); 
unity.addItem("Afghanistan"); 
unity.addItem("Iran"); 
unity.addItem("Iraq"); 
unity.setEditable(true); 
uy.add(unity); 

JLabel city=new JLabel("City:"); 
city.setBounds(350,320,100,25); 
city.setForeground(Color.BLACK); 
uy.add(city); 
JComboBox cety=new JComboBox(); 
cety.setBounds(430,320,140,25); 

cety.addItem(""); 
uy.add(cety); 
unity.addItemListener(new ItemListener(){ 
public void itemStateChanged(ItemEvent olala){ 
    if(unity.getSelectedItem().equals("Pakistan")){ 
     cety.addItem("Lahore"); 
     cety.addItem("Islamabad"); 
     cety.addItem("Karachi"); 
     cety.addItem("Rawalpindi"); 
     cety.addItem("Faisalabad"); 
     cety.addItem("Gujjranwala"); 
    } 
} 
}); 

하지만 난이 프로그램을 실행할 때, 문이 아무것도하지 않은 경우의 블록. JComboBox에 값을로드하려면 다른 JComboBox의 선택에 따라 어떻게해야합니까?

+1

세미 콜론'if (unity.getSelectedItem(). equals ("Pakistan"));를 제거하십시오. if 문이 빈 몸체를 실행 중입니다. – Arjan

+0

@Arjan 삭제했습니다. 하지만 여전히 아무것도하지 않고있다. – Mcolo

답변

0

실제로 "중국"을 먼저 선택한 다음 "파키스탄"을 다시 선택하고 cety 콤보 상자의 아래쪽 화살표를 클릭하면 항목이 표시됩니다.

쉽게 디버그를 할 수 있으며 방법은 당신이 다른 항목을 선택하면 itemStateChanged라는 것을 알거야 그래서 같은 println,

 ... 
     unity.addItemListener(new ItemListener() { 
      @Override 
      public void itemStateChanged(ItemEvent olala) { 
// DEBUG 
System.out.println("itemStateChanged(): item = " + olala.getItem()); 
      ... 

을 추가하여 호출 할 때 참조하십시오. 프로그램을 시작하고 처음으로 콤보 상자를 보면 상태가 아직 변경되지 않았으므로 메서드가 호출되지 않고 cety이 비어 있습니다. unity 상태를 변경하려면 코드 끝에

 unity.setSelectedIndex(1); 
     unity.setSelectedIndex(0); 

을 추가하여 상태를 변경할 수 있습니다. 또는 addItemListener 뒤에 모든 unity.addItem 행을 이동하면 목록에 첫 번째 항목을 추가하면 이벤트가 트리거됩니다.

새 항목을 추가하기 전에 항목을 지우거나 unity에서 몇 가지 항목을 선택하면 cety에 긴 목록이 표시됩니다. 이 목록에 빈 문자열을해야하는 경우,

  ... 
     public void itemStateChanged(ItemEvent olala){ 
      cety.removeAllItems(); 
      cety.addItem(""); 
      if (unity.getSelectedItem().equals("Pakistan")) { 
       cety.addItem("Lahore"); 
       ... 

그런 다음 대신 if 문 톤의 switch를 사용할 수 있습니다뿐만 아니라, 여기에 문을 이동 이벤트에서 항목을 얻을 대신 unity 필요

JComboBox<String> unity = new JComboBox<>(); 
    unity.setBounds(430, 280, 140, 25); 
    unity.setEditable(true); 
    uy.add(unity); 

    JLabel city = new JLabel("City:"); 
    city.setBounds(350, 320, 100, 25); 
    city.setForeground(Color.BLACK); 
    uy.add(city); 

    JComboBox<String> cety = new JComboBox<>(); 
    cety.setBounds(430, 320, 140, 25); 
    uy.add(cety); 

    unity.addItemListener(new ItemListener() { 
     @Override 
     public void itemStateChanged(ItemEvent event) { 
      cety.removeAllItems(); 
      cety.addItem(""); 
      switch (event.getItem().toString()) { 
       case "Pakistan": 
        cety.addItem("Lahore"); 
        cety.addItem("Islamabad"); 
        cety.addItem("Karachi"); 
        cety.addItem("Rawalpindi"); 
        cety.addItem("Faisalabad"); 
        cety.addItem("Gujjranwala"); 
        break; 
       case "China": 
        cety.addItem("Beijing"); 
        break; 
      // ... 
      } 
     } 
    }); 
    unity.addItem("Pakistan"); 
    unity.addItem("China"); 
    unity.addItem("America"); 
    unity.addItem("Japan"); 
    unity.addItem("Bangladesh"); 
    unity.addItem("Srilanka"); 
    unity.addItem("India"); 
    unity.addItem("Turkey"); 
    unity.addItem("UK"); 
    unity.addItem("Afghanistan"); 
    unity.addItem("Iran"); 
    unity.addItem("Iraq"); 

// This would be a workaround if you don't want to move the addItems: 
// unity.setSelectedIndex(1); 
// unity.setSelectedIndex(0); 
관련 문제