ComboBox(콤보박스) 선택 아이템 중복 출력되는것 방지(ItemEvent.SELECTED)
질문
아 말그대로 이벤트 발생이 중복 안되게 하는 방법이 필요해요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
jComboBox1.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
int index = jComboBox1.getSelectedIndex();
if(index==1){System.out.println("날짜별");}
else if(index==2){System.out.println("학생별"); }
else if(index==3){System.out.println("장비별");}
}
});
이렇게 썼더니...아나...ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
날짜별
날짜별
...이런식으로 한번 클릭했음에도 불구하고 두번이 나와요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ아 답답해!!!
진짜 이런것도 안되서 언제 다하지 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ으아아악
도와주세요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ엏어헝헝
답변
itemStateChanged "아이템의 상태가 바꼈다" 라는 것은 두 가지 상태가 있습니다.
하나는 선택되고 다른 하나는 선택된 상태에서 선택되지 않은 상태로 바뀌는 것이죠.
그래서 다른 하나를 선택하면 두 번의 이벤트가 발생되어
itemStateChanged 메서드가 두 번 호출 되는 것이죠.
이 문제는 어떤 이벤트가 "선택" 이벤트인지 검사하면 해결할 수 있죠.
그것은 메서드의 매개변수인 ItemEvent를 통해서 쉽게 알 수 있죠.
ItemEvent는 getStateChange()라는 메서드를 가지고 있습니다.
상태변화를 가져오는데 그 값은 단지 1과 2이죠.
선택은 1, 선택해제는 2죠.
이것을 굳이 숫자로 검사하기 보단 ItemEvent에 미리 선언되어있는
ItemEvent.SELECTED와 ItemEvent.DESELECTED로 알아보기 쉽게 비교할 수 있을 것입니다.
수정예문)
jComboBox1.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
if(e.getStateChange()==ItemEvent.SELECTED) {
int index = jComboBox1.getSelectedIndex();
if(index==1){System.out.println("날짜별");}
else if(index==2){System.out.println("학생별"); }
else if(index==3){System.out.println("장비별");}
}
}
});
출처