어서와 Java 는처음이지! 제 10 장이벤트처리 이벤트분류 액션이벤트 키이벤트 마우스이동이벤트 어댑터클래스
스윙컴포넌트에의하여지원되는이벤트는크게두가지의카테고리로나누어진다.
사용자가버튼을클릭하는경우 사용자가메뉴항목을선택하는경우 사용자가텍스트필드에서엔터키를누르는경우
두개의버튼을만들어서패널의배경색을변경하는프로그램을작성하여보자. 이벤트리스너는하나만생성한다.
class MyFrame extends JFrame { private JButton button1; private JButton button2; private JPanel panel; public MyFrame() { this.setsize(300, 200); this.setdefaultcloseoperation(jframe.exit_on_close); this.settitle(" 이벤트예제 "); panel = new JPanel(); button1 = new JButton(" 노란색 "); button1.addactionlistener(new MyListener()); panel.add(button1); button2 = new JButton(" 핑크색 "); button2.addactionlistener(new MyListener()); panel.add(button2); this.add(panel); this.setvisible(true);
private class MyListener implements ActionListener { public void actionperformed(actionevent e) { if (e.getsource() == button1) { panel.setbackground(color.yellow); else if (e.getsource() == button2) { panel.setbackground(color.pink); public class ChangeBackground { public static void main(string[] args) { MyFrame t = new MyFrame();
getsource() 메소드를이용하여이벤트를발생시킨객체를식별한다. getid() 메소드를이용하여이벤트의타입을식별한다. getactioncommand() 메소드를이용하여이벤트를발생시킨컴포넌트이름을식별한다. public void actionperformed(actionevent e) { if (e.getsource () == button1){
KeyListener 인터페이스구현 메소드 설명 keytyped(keyevent e) 사용자가글자를입력했을경우에호출 keypressed(keyevent e) keyreleased(keyevent e) 사용자가키를눌렀을경우에호출 사용자가키에서손을떼었을경우에호출
상 ( ), 하 ( ), 좌 ( ), 우 ( ) 키를입력하면, 다음그림과같이 "HELLO" 문자열이 10 픽셀씩이동하는프로그램을작성하라. (50,50) 초기상태 상, 하, 좌, 우키를여러번입력하여 "HELLO" 를움직인상태 상, 하, 좌, 우키를움직이면한번에 10 픽셀씩 "HELLO" 텍스트는상, 하, 좌, 우로이동한다. 이텍스트는프레임의영역을벗어나서움직일수있다.
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class FlyingTextEx extends JFrame { JPanel contentpane = new JPanel(); JLabel la = new JLabel("HELLO"); FlyingTextEx() { super(" 상, 하, 좌, 우키를이용하여텍스트움직이기 "); setdefaultcloseoperation(jframe.exit_on_close); setcontentpane(contentpane); contentpane.setlayout(null); contentpane.addkeylistener(new MyKeyListener()); la.setlocation(50, 50); la.setsize(100, 20); contentpane.add(la); setsize(200, 200); setvisible(true); contentpane.requestfocus(); // 포커스지정
class MyKeyListener extends KeyAdapter { public void keypressed(keyevent e) { int keycode = e.getkeycode(); // 입력된키코드 switch(keycode) { case KeyEvent.VK_UP: la.setlocation(la.getx(), la.gety() - 10); break; case KeyEvent.VK_DOWN: la.setlocation(la.getx(), la.gety() + 10); break; case KeyEvent.VK_LEFT: la.setlocation(la.getx() - 10, la.gety()); break; case KeyEvent.VK_RIGHT: la.setlocation(la.getx() + 10, la.gety()); break; public static void main(string [] args) { new FlyingTextEx();
키보드에서문자가입력되면문자코드와키코드, ALT 나 SHIFT 키의상태를텍스트영역에출력한다. JTextField JTextArea
keytyped(keyevent e) e.isaltdown() e.iscontroldown() e.isshiftdown()
public class KeyEventTest extends JFrame implements KeyListener { private JPanel panel; private JTextField field; private JTextArea area; public KeyEventTest() { panel = new JPanel(new GridLayout(0, 2)); panel.add(new JLabel(" 문자를입력하시오 : ")); field = new JTextField(10); panel.add(field); area = new JTextArea(3, 30); add(panel, BorderLayout.NORTH); add(area, BorderLayout.CENTER); field.addkeylistener(this); settitle("keyevent Test"); setsize(400, 200); setvisible(true); public static void main(string[] args) { new KeyEventTest();
public void keytyped(keyevent e) { // (3) display(e, "Key Typed "); public void keypressed(keyevent e) { display(e, "Key Pressed "); public void keyreleased(keyevent e) { display(e, "Key Released "); protected void display(keyevent e, String s) { char c = e.getkeychar(); int keycode = e.getkeycode(); String modifiers = "Alt: " + e.isaltdown() + "Ctrl: " + e.iscontroldown() + "Shift: " + e.isshiftdown(); area.append("" + s + " 문자 " + c + "( 코드 : " + keycode + ") " + modifiers + "\n");
public void keytyped(keyevent e) { // (3) display(e, "KeyTyped "); public void keypressed(keyevent e) { display(e, "KeyPressed "); public void keyreleased(keyevent e) { display(e, "Key Pressed "); protected void display(keyevent e, String s) { char c = e.getkeychar(); int keycode = e.getkeycode(); String modifiers = e.isaltdown() + " " + e.iscontroldown() + " " + e.isshiftdown(); System.out.println(s + " " + c + " " + keycode + " " + modifiers);