728x90
Item 이벤트의 경우 Item을 가지는 컴포넌트에게 적용할 수있는 이벤트이다.
이 이벤트를 가지려면 ItemSelectable 인터페이스를 상속받아야 한다.
위의 인터페이스를 상속받는 목록은 아래 그림을 보면 알 수 있다.
위에서 보면 All Known Implementing Classes를 보라.
여기에 해당하는 모든 클래스는 이 이벤트를 사용할 수 있다.
그러면 그 이벤트를 사용해서 코딩하는 예제를 한번보자.
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestSwing {
public static void main(String[] args) {
JFrame fr = new JFrame("This 프레임");
JPanel pn = new JPanel();
JCheckBox[] chk = new JCheckBox[4];
GridLayout gl = new GridLayout(2, 2);
pn.setLayout(gl);
for (int i = 0; i < chk.length; i++) {
chk[i] = new JCheckBox("Check" + i);
chk[i].addItemListener(new MyItemListener());
pn.add(chk[i]);
}
pn.add(chk[0]);
pn.add(chk[1]);
pn.add(chk[2]);
pn.add(chk[3]);
fr.setContentPane(pn);
fr.setSize(400, 300);
fr.setVisible(true);
}
}
class MyItemListener implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
JCheckBox chk = (JCheckBox) e.getSource();
System.out.println("Text : " + chk.getText());
System.out.println("Selected : " + chk.isSelected());
System.out.println("StateChange : " + e.getStateChange());
System.out.println("Item : " + e.getItem());
System.out.println("ItemSelecable :" + e.getItemSelectable());
}
}
테스트를 해보자. 실행해서 하나하나 체크를 풀었다가 해제했다가 하면 이벤트가 생긴다.
사용하는 메소드는 아래와 같다.
이 중에서 getText와 isSelected메소드는 AbstractButton의 상속받은 클래스를 사용해야한다.
ItemEvent메소드
getStateChange : 상태의 변화를 감지한다. true에서 false로 바뀌면 2, 반대는 1이다.
getItem : 모든 상태를 반환한다. 필요한걸 골라서 사용하면된다.
getSelecable : 모든 상태를 반환한다. 위와 결과는 똑같은데 반환타입이 다르다.
중요한건 getText나 isSelected는 ItemEvent의 메소드가 아니므로 getSource로 소스를 꺼집어네서 오버로딩을해야한다.
단 getStateChange의 존재로 사실상 isSelected를 쓸 필요는 없다.
'Programming > Java-Swing' 카테고리의 다른 글
[Swing-10]Event-Window, 프로세서 종료하기 (0) | 2017.10.27 |
---|---|
[Swing-09]Event-Focus (0) | 2017.10.27 |
[Swing-07]Evnet-Mouse (0) | 2017.10.25 |
[Swing-06]Event-Key (0) | 2017.10.24 |
[Swing-05]Event-Action (0) | 2017.10.21 |