노력과 삽질 퇴적물
JAVA: 이벤트처리 본문
* 이클립스등을 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. 페인트
-> 작은 이미지를 Toolkit클래스나 drawString으로 윈도우내 출력을 하게 하는건 동일하다. 배경 이미지의 경우, SWING은 ImageIcon클래스를 사용해야 하는 차이점 있다.(AWT는 Toolkit) | |
① 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(); } } |
① 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 |