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

+ Recent posts