노력과 삽질 퇴적물

JAVA: 이벤트처리 본문

프로그래밍note/언어. JAVA & JDK 계열

JAVA: 이벤트처리

MTG 2012. 8. 23. 12:23


* 이클립스등을 UTF-8환경으로 안 하시면 실행되는 윈도우내 폰트들이 깨집니다.






01. 윈도우 기본 이벤트

AWT와 달리 스윙에서는 별도의 지정 없이도 종료버튼을 누르면 윈도우가 종료된다.

하지만 불완전한 종료여서 AWT/스윙에 윈도우 종료에 대한 이벤트 처리를 지정해줘야 한다.

import javax.swing.JFrame;


public class WindowEventFrame extends JFrame

{

WindowEventHandler weh;

public WindowEventFrame()

{

weh = new WindowEventHandler();

this.addWindowListener(weh);

setSize(300, 400);

setVisible(true);

// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// AWT에서는 매개인수를 EXIT_ON_CLOSE로만.

}

public static void main(String[] ar)

{

new WindowEventFrame();

}

}

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;


public class WindowEventHandler implements WindowListener

{

public void windowActivated(WindowEvent e)

{ System.out.print("windowActivated\n"); }

public void windowClosed(WindowEvent e)

{ System.out.print("windowClosed\n"); }

public void windowClosing(WindowEvent e)

{

System.out.print("windowClosing\n");

System.exit(0);//윈도우 종료.

}

public void windowDeactivated(WindowEvent e)

{ System.out.print("windowDeactivated\n"); }

public void windowDeiconified(WindowEvent e)

{ System.out.print("windowDeiconified\n"); }

public void windowIconified(WindowEvent e)

{ System.out.print("windowIconified\n"); }

public void windowOpened(WindowEvent e)

{ System.out.print("windowOpened\n"); }

}






02. 액션 이벤트

 1. 버튼 이벤트

마우스로 버튼 컴포넌트를 조작하는 이벤트 예시. 

 ① AWT

 ② SWING






 2. 키보드 이벤트

 ① AWT

 ② SWING

import java.awt.Frame;

import java.awt.Label;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;


public class KeyEventSample extends Frame implements KeyListener

{

Label display = new Label("", Label.CENTER);

public KeyEventSample() //생성자

{

add(display);

this.addKeyListener(this);

setSize(300, 200);

setVisible(true);

requestFocus();

}


private void setMessage(String msg)

{ display.setText(msg); }

//---------------키보드 처리---------------

public void keyPressed(KeyEvent e)

{

int keyCode = e.getKeyCode();

char keyChar = e.getKeyChar();

setMessage("keyCode : " + keyCode + "\t" + "keyChar : " + keyChar);

}

public void keyReleased(KeyEvent e)

{ System.out.print("keyReleased\n"); }

public void keyTyped(KeyEvent e)

{ System.out.print("keyTyped\n"); }

//---------------main()---------------

public static void main(String[] ar)

{

new KeyEventSample();

}

}

 






03. 페인트

 1. paint()

-> 작은 이미지를 Toolkit클래스나 drawString으로 윈도우내 출력을 하게 하는건 동일하다.

배경 이미지의 경우, SWING은 ImageIcon클래스를 사용해야 하는 차이점 있다.(AWT는 Toolkit)

PaintAWT.java

PaintSWING.java

paint용 이미지파일.rar

 ① AWT

 ② SWING

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;


public class PaintAWT extends Frame

{

Image backImg;

Image img;


public PaintAWT()

{

setSize(250, 300);

setVisible(true);

}

public void paint(Graphics g)

{// Graphics객체는 그릴수 있는 도구.

//이미지처리. 배경

backImg = Toolkit.getDefaultToolkit().getImage("img/android_wall.jpg");

g.drawImage(backImg, 0, 0, getWidth(), getHeight(), this);

//이미지처리. 스프라이트

img = Toolkit.getDefaultToolkit().getImage("img/sprite.png");

g.drawImage(img, 30, 150, this);

//문자열 처리

g.drawString("paint() in AWT", 20, getHeight()-20);

}

public static void main(String[] ar)

{

new PaintAWT();

}

}

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import javax.swing.ImageIcon;

import javax.swing.JFrame;


public class PaintSWING extends JFrame

{

Image backImg;

Image img;

public PaintSWING()

{

setSize(250, 300);

setVisible(true);

}

public void paint(Graphics g)

{// Graphics객체는 그릴수 있는 도구.

//이미지처리. 배경

backImg = new ImageIcon("img/android_wall.jpg").getImage();

g.drawImage(backImg, 0, 0,

getWidth(), getHeight(), this);

//이미지처리. 스프라이트

img = Toolkit.getDefaultToolkit().getImage("img/sprite.png");

g.drawImage(img, 30, 150, this);

//문자열 처리

g.drawString("paint() in SWING",

20, getHeight()-20);

}

public static void main(String[] ar)

{

new PaintSWING();

}

}




 2. repaint()


 ① AWT ② SWING

import java.awt.BorderLayout;

import java.awt.Button;

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;


public class RepaintAWT extends Frame implements ActionListener

{

Button bt = new Button("GO!");

Image[] img = new Image[3];

Image backImg;

int gX, gY;

int imgIndex = 0;

public RepaintAWT()

{

//이벤트 연결, 버튼

bt.addActionListener(this);

add(bt, BorderLayout.SOUTH);

//리소스 로딩, 이미지

backImg = Toolkit.getDefaultToolkit().getImage("img/android_wall.jpg");

for(int i = 0; i < img.length; i++)

{

img[i] = Toolkit.getDefaultToolkit().getImage("img/penguin" + (i+1) + ".gif");

}

gX = 10;

gY = 150 - (img[0].getHeight(this) / 2);

setSize(300, 300);

setVisible(true);

requestFocus();

}

//----------paint----------

public void paint(Graphics g)

{

//이미지처리. 배경

g.drawImage(backImg, 0, 0, getWidth(), getHeight(), this);

//이미지처리. 스프라이트

g.drawImage(img[imgIndex], gX, gY, this);

}

//----------버튼이벤트----------

public void actionPerformed(ActionEvent e)

{

gX += 20;

if(gX > getWidth()-img[0].getWidth(this))

{

gX = getWidth()-img[0].getWidth(this);

}

++imgIndex;

imgIndex = imgIndex%3;

repaint(); // repaint -> [update] -> paint

}


//----------main----------

public static void main(String[] ar)

{

new RepaintAWT();

}

}

import java.awt.BorderLayout;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;


public class RepaintSWING extends JFrame implements ActionListener

{

JButton bt = new JButton("GO!");

Image[] img = new Image[3];

Image backImg;

int gX, gY;

int imgIndex = 0;

public RepaintSWING()

{

//이벤트 연결, 버튼

bt.addActionListener(this);

add(bt, BorderLayout.SOUTH);

//리소스 로딩, 이미지

backImg = new ImageIcon("img/android_wall.jpg").getImage();

for(int i = 0; i < img.length; i++)

{

img[i] = Toolkit.getDefaultToolkit().getImage("img/penguin" + (i+1) + ".gif");

}

gX = 10;

gY = 150 - (img[0].getHeight(this) / 2);

setSize(300, 300);

setVisible(true);

requestFocus();

}

//----------paint----------

public void paint(Graphics g)

{

//이미지처리. 배경

g.drawImage(backImg, 0, 0, getWidth(), getHeight(), this);

//이미지처리. 스프라이트

g.drawImage(img[imgIndex], gX, gY, this);

}

//----------버튼이벤트----------

public void actionPerformed(ActionEvent e)

{

gX += 20;

if(gX > getWidth()-img[0].getWidth(this))

{

gX = getWidth()-img[0].getWidth(this);

}

++imgIndex;

imgIndex = imgIndex%3;

repaint(); // repaint -> [update] -> paint

}


//----------main----------

public static void main(String[] ar)

{

new RepaintSWING();

}

}

'프로그래밍note > 언어. JAVA & JDK 계열' 카테고리의 다른 글

JAVA: 간단한 응용프로그램  (0) 2012.08.28
JAVA: 스레드  (0) 2012.08.27
JAVA: GUI 및 프레임  (2) 2012.08.21
JAVA: 자바 기초 (4)  (0) 2012.08.08
이클립스: 설정 및 팁  (0) 2012.07.20