2013-07-25 4 views
0

아래에서 볼 수 있듯이 'options'배열의 요소를 목록의 옵션으로 사용하여 JComboBox를 만들었습니다.JComboBox에서 선택된 항목을 구별합니다.

목록의 특정 항목을 선택하면 JLabels 'one'또는 'two'를 표시하려고합니다. 예. 옵션 1을 선택하면 '1'이 표시되고 옵션 2를 선택하면 '2'가 표시되고 디스플레이에서 '1'이 제거됩니다.

add()와 함께 JLabels을 추가하는 방법을 알고 있습니다. 하지만 어떤 항목이 선택되었는지 구별하는 방법을 모르겠습니다.

온라인으로 검색하여 java 문서를 살펴 보았지만 관련 솔루션을 찾을 수 없습니다.

감사

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 
import java.io.*; 
import java.lang.*; 
import java.util.*; 

public class converterPage extends JFrame { 
    private JComboBox box; 
    private static String[] options = {"Option one", "Option two"}; 
    private JLabel one, two; 

    public converterPage() { 
     super("Convert Units"); 
     setLayout (null); 

     box = new JComboBox(options); 
     box.setBounds(10, 10, 150, 30); 
     add(box); 

     one = new JLabel("one"); 
     two = new JLabel("two"); 
     one.setBounds(170, 10, 150, 30); 
     two.setBounds(170, 10, 150, 30); 


     box.addItemListener(
      new ItemListener(){ 
       public void itemStateChanged(ItemEvent event){ 
        // depending on what is selected, i want to only display certain stuff 
       } 
      }   
     ); 
    } 
} 
+0

[중복 가능] (http://stackoverflow.com/questions/58939/jcombobox-selection-change-listener) - [이 답변보기] (http://stackoverflow.com/a/14424530/679982) it 귀하의 질문에 대답해야합니다. – linski

+0

null 레이아웃을 사용하지 마십시오! – camickr

답변

1

당신은 사용할 수 있습니다

event.getItem() 

현재 선택한 항목을 나타내는 Object을 얻었다. 콤보 박스가 String 배열로 생성 되었기 때문에 객체는 실제로 String입니다.

0

나는이 후 당신이있어 무엇인가 생각 : 나는 (당신이 그것을 자동으로 가져올 것으로 java.lang에서 가져올 필요가 없습니다) 당신의 수입을 청소의 자유를했다

import java.awt.event.*; 
import java.util.HashMap; 
import java.util.Map; 
import javax.swing.*; 

public class ConverterPage extends JFrame 
{ 
    private JComboBox box; 
    private final Map<String, JLabel> map = new HashMap<>(); 

    public ConverterPage() 
    { 
     super("Convert Units"); 
     super.setLayout(null); 

     final JLabel one = new JLabel("one"); 
     final JLabel two = new JLabel("two"); 
     one.setBounds(170, 10, 150, 30); 
     two.setBounds(170, 10, 150, 30); 

     this.map.put("Option one", one); 
     this.map.put("Option two", two); 
     this.box = new JComboBox(this.map.keySet().toArray(new String[this.map.size()])); 
     this.box.setBounds(10, 10, 150, 30); 
     super.add(box); 

     this.box.addItemListener(new ItemListener() 
     { 
      @Override 
      public void itemStateChanged(ItemEvent event) 
      { 
       // depending on what is selected, i want to only display certain stuff 
       final JLabel label = map.get((String) event.getItemSelectable().getSelectedObjects()[0]); 
       System.out.println(label.getText()); 
      } 
     }); 
    } 

    public static void main(String[] args) 
    { 
     final ConverterPage c = new ConverterPage(); 
     c.setSize(400, 400); 
     c.setVisible(true); 
    } 
} 

및 클래스 이름은 정말해야 자본 전입니다.

+0

선택한 옵션을 인쇄합니다. '옵션 1', 두 번. 내가 system.out.println을 add로 바꾸면 JLabel을 표시하기 위해 오류가 반환됩니다. –

+0

@ user2587777 두 개의 이벤트가 있기 때문에 두 번 수행됩니다 : 첫 번째 항목이 선택 해제되고 두 번째 옵션이 선택됩니다 (event.getStateChange()로 표시됨). "Option One"을 "JLabel one"에 연결하고 싶다는 뜻이라면 맵 또는 스위치 메소드가 필요합니다. – MrLore

+0

예 "Option One"이 JFrame에 표시되기를 원합니다. "Option Two"의 JLabel 두 개와 동일하게 선택합니다. –

관련 문제