๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Study/Java

์ž๋ฐ”ํ”„๋กœ๊ทธ๋ž˜๋ฐ 10์ฃผ์ฐจ ์ •๋ฆฌ

์ˆ˜์—…๋‚ ์งœ/์ •๋ฆฌ๋‚ ์งœ

2022.05.10/2022.05.15

 

ํ•™์Šต์ฃผ์ œ
  • 10 ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

 

ํ•™์Šต๋‚ด์šฉ

10 ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ •๋ฆฌ
1. ์ด๋ฒคํŠธ ์ข…๋ฅ˜: ActionEvent
2. ๋ฆฌ์Šค๋„ˆ ์ด๋ฆ„: ActionListener
3. ๋ฆฌ์Šค๋„ˆ ๊ตฌํ˜„: actionPerformed
4. ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก: addActionListener

Key ์ด๋ฒคํŠธ

๋ฉ”์†Œ๋“œ ์„ค๋ช…
keyPress(KeyEvent e) ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๊ฒฝ์šฐ์— ํ˜ธ์ถœ
keyTyped(KeyEvent e) ์‚ฌ์šฉ์ž๊ฐ€ ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ์— ํ˜ธ์ถœ
keyReleased(KeyEvent e) ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค์—์„œ ์†์„ ๋–ผ์—ˆ์„ ๊ฒฝ์šฐ์— ํ˜ธ์ถœ

โ€ป keyTyped() → Alt, Ctrl, Shift๋Š” ๋ฌธ์žํ‚ค๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์ž…๋ ฅ ์•ˆ๋จ

 

ํ‚ค ์ด๋ฒคํŠธ ์˜ˆ์ œ

ํ‚ค๋ณด๋“œ์—์„œ ๋ฌธ์ž๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด ๋ฌธ์ž์™€ ํ‚ค ์ฝ”๋“œ, Alt๋‚˜ Ctrl, Shift ํ‚ค์˜ ๋ˆŒ๋ฆผ ์—ฌ๋ถ€๋ฅผ ํ…์ŠคํŠธ ์˜์—ญ์—์„œ ์ถœ๋ ฅ

public class KeyEventTest extends JFrame implements KeyListener{
	private JPanel panel;
    privet JTextField field;
    private JTextArea area;
    public keyEventTest(){
    	panel = new JPanel(new GridLayout(0, 2));
        panel.add(new JLabel("๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜์‹œ์˜ค: "));
        field = new JTextField(10);	// #2: ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ์ด๋ฒคํŠธ๋ฐœ์ƒ(ํ…์ŠคํŠธํ•„๋“œ์— ์ปค์„œ ๋‘๊ณ  ์ž…๋ ฅ)
        panel.add(field);
        field.addKeyListener(this);
        area = new JTextArea(3, 30);	// ํ–‰๋ ฌ
        add(panel, BorderLayout.NORTH);
        add(area, BorderLayout.CENTER);
        setTitle("KeyEvent Test");
        setSize(400, 200);
        setVisible(true);
    }
    public static void main(String[] args){new KeyEventTest();}
    // 3๊ฐœ ๋ชจ๋‘ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
    public void keyPressed(KeyEvent e){display(e, "Key Pressed ");}
    public void keyTyped(KeyEvent e){display(e, "Key Typed ");}
    public void keyReleased(KeyEvent e){display(e, "Key Released ");}	// display ํ•จ์ˆ˜
    
    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();
        								// Alt๋ˆŒ๋ ธ๋Š”์ง€ true, false
        area.append(s + "๋ฌธ์ž " + c + "(์ฝ”๋“œ: " + keyCode + ") " + modifiers + "\n");
        	// append: ๊ธฐ์กด ๋‚ด์šฉ ๋†”๋‘๊ณ  ๋’ค์— ๋‚ด์šฉ ์ถ”๊ฐ€
    }
}

 

์ž๋™์ฐจ ๊ฒŒ์ž„ ์˜ˆ์ œ

ํ‚ค๋ณด๋“œ์˜ ํ™”์‚ดํ‘œ ํ‚ค๋กœ ์›€์ง์ด๋Š” ์ž๋™์ฐจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑ

public class CarGameTest extends JFrame{
	public CarGameTest(){
    	setSize(300, 300)
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(new MyPanel());
        setVisible(true);
    }
	public static void main(String[] args){CarGameTest s = new CarGameTest();}
}

class MyPanel extends JPanel{
	BufferedImage img = null;	// ๊ฐ์ฒด์ฐธ์กฐ๋ณ€์ˆ˜(์ด๋ฏธ์ง€ ๋งŒ๋“ค ์ค€๋น„)
    int img_x = 100, img_y = 100;
    public void paintComponent(Graphics g){	// JPanel ์˜ค๋ฒ„๋ผ์ด๋”ฉ(JPanel ์ƒ์†์ด์œ : paintComponent ์‚ฌ์šฉํ•˜๋ ค๊ณ )
    	super.paintComponents(g);	// JPanel์˜ painComponenet ํ˜ธ์ถœ(ํˆฌ๋ช…(๋นˆ) ํŒจ๋„ ๊ทธ๋ฆผ) -> ์—†์œผ๋ฉด ์ด๋ฏธ์ง€ ์ด๋™ ์‹œ, ์ž”์ƒ ๋‚จ์Œ
        g.drawImage(img, img_x, img_y, null);	// ์ด๋ฏธ์ง€๋ฅผ x:100, y:100์— ๊ทธ๋ ค๋ผ
    }
    public MyPanel(){	// MyPanel์ƒ์„ฑ์ž
    	try{img = ImageIO.read(new File("car.gif"));}	// ์ด๋ฏธ์ง€ ์ž…์ถœ๋ ฅ
        catch(IOException e){System.out.print("no image");	System.exit(1);}	// ํŒŒ์ผ ๋ชป์ฐพ์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ
        addKeyListener(new KeyListener(){	// MyPanel์˜ addKeyListener.(this์ƒ๋žต)
        	public void keyPressed(KeyEvent e){		// ๋ฌด๋ช…ํด๋ž˜์Šค
            	int keycode = e.getKeyCode();
                switch (keycode) {
				case KeyEvent.VK_UP:	img_y -= 10;	break;
				case KeyEvent.VK_DOWN:	img_y += 10;	break;
				case KeyEvent.VK_LEFT:	img_x -= 10;	break;
				case KeyEvent.VK_RIGHT:	img_x += 10;	break;
				}
                repaint();}	// ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ. paintComponent ์‹คํ–‰๋จ
        	public void keyReleased(KeyEvent arg0){}
            public void keyTyped(KeyEvent arg0){}
        });
        this.requestFocus();	// ํฌ์ปค์Šค์š”์ฒญ
        setFocusable(true);		// ํฌ์ปค์Šค ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์œผ๋กœ true (์•ก์…˜์ทจํ•œ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ focus๋จ)
    }
}

 

Mouse ์ด๋ฒคํŠธ

MouseListener ์ธํ„ฐํŽ˜์ด์Šค

๋ฉ”์†Œ๋“œ ์„ค๋ช…
mouseClicked(MouseEvent e) ์‚ฌ์šฉ์ž๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํด๋ฆญํ•œ ๊ฒฝ์šฐ์— ํ˜ธ์ถœ๋œ๋‹ค.
mouseEntered(MouseEvent e) ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ํ˜ธ์ถœ๋œ๋‹ค
mouseExited(MouseEvent e) ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋‚˜๊ฐ€๋ฉด ํ˜ธ์ถœ๋œ๋‹ค.
mousePressed(MouseEvent e) ๋งˆ์šฐ์Šค๊ฐ€ ์ปดํฌ๋„ŒํŠธ ์œ„์—์„œ ๋ˆŒ๋ ค์ง€๋ฉด ํ˜ธ์ถœ๋œ๋‹ค.
mouseReleased(MouseEvente e) ๋งˆ์šฐ์Šค๊ฐ€ ์ปดํฌ๋„ŒํŠธ ์œ„์—์„œ ๋–ผ์–ด์ง€๋ฉด ํ˜ธ์ถœ๋œ๋‹ค.

 

Mouse ์ด๋ฒคํŠธ ์ˆœ์„œ

  1. Mouse pressed
  2. Mouse released
  3. Mouse cliked

 

MouseMotionListener ์ธํ„ฐํŽ˜์ด์Šค

๋ฉ”์†Œ๋“œ ์„ค๋ช…
mouseDragged(MouseEvent e) ๋งˆ์šฐ์Šค ๋“œ๋ž˜๊ทธํ•˜๋ฉด ํ˜ธ์ถœ๋œ๋‹ค.
mouseMoved(MouseEvent e) ๋งˆ์šฐ์Šค๊ฐ€ ํด๋ฆญ๋˜์ง€ ์•Š๊ณ  ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ์— ํ˜ธ์ถœ๋œ๋‹ค.

 

MouseEvent

class MyPanel extends JPanel {
	BufferedImage img = null;
	int img_x = 0, img_y = 0;

	public MyPanel() {
	try {
		img = ImageIO.read(new File("car.gif"));
	} catch (IOException e) {

		System.out.println("no image");
		System.exit(1);
	}
	addMouseListener(new MouseListener() {
		public void mousePressed(MouseEvent e) {
			img_x = e.getX();
			img_y = e.getY();
			repaint();
		}
		public void mouseReleased(MouseEvent e) {}
		public void mouseEntered(MouseEvent e) {}
		public void mouseExited(MouseEvent e) {}
		public void mouseClicked(MouseEvent e) {}
	});
}

public void paintComponent(Graphics g) {
	super.paintComponent(g);
	g.drawImage(img, img_x, img_y, null);
	}
}
public class MyFrame extends JFrame {
	public MyFrame() {
		add(new MyPanel());
		setSize(300, 500);
		setVisible(true);
	}

	public static void main(String[] arg) {
		new MyFrame();
	}	
}

 

์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

๋งˆ์šฐ์Šค ํด๋ฆญ์œผ๋กœ ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

class Rectangle {	// ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๋Š” ํด๋ž˜์Šค
	int x, y, w, h;
}

class MyPanel extends JPanel implements MouseListener {
	BufferedImage img = null;
	int img_x = 0, img_y = 0;

	Rectangle[] array = new Rectangle[100];	// ๊ฐ์ฒด ๋ฐฐ์—ด. ํด๋ž˜์Šค ๋ฐฐ์—ด ์“ฐ๋Š” ์ด์œ : paintComponent๊ฐ€ ๋งค๋ฒˆ ์ƒˆ๋กœ ๊ทธ๋ฆผ->์ง€์›Œ์ง€์ง€์•Š๊ณ  ๊ณ„์† ๊ทธ๋ฆผ(๊ฐ์ฒด์œ ์ง€)
	int index = 0;

	public MyPanel() {
		this.addMouseListener(this);
	}

	public void paintComponent(Graphics g) {	// JPanel์˜ paintComponent -> ๋นˆํŒจ๋„ ๊ทธ๋ฆผ
		super.paintComponent(g);
		for (Rectangle r : array)	// ๋ฐฐ์—ด์œ„์น˜ ๋ฐ˜๋ณต๋ฌธ(for each)
			if (r != null)
				g.drawRect(r.x, r.y, r.w, r.h);	// drawRect: ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆผ, ์‹ค๋งค๊ฐœ๋ณ€์ˆ˜ 4๊ฐœ ํ•„์š”
	}

	@Override
	public void mousePressed(MouseEvent e) {

		if (index > 100)
			return;
		array[index] = new Rectangle();	// ์‚ฌ๊ฐํ˜• ๊ฐ์ฒด ์ƒ์„ฑ
		array[index].x = e.getX();	// getX: ํด๋ฆญํ•œ x์ขŒํ‘œ
		array[index].y = e.getY();	// getY: ํด๋ฆญํ•œ y์ขŒํ‘œ
		array[index].w = 50;
		array[index].h = 50;
		index++;
		repaint();
	}

	@Override
	public void mouseReleased(MouseEvent e) {
	}

	@Override
	public void mouseClicked(MouseEvent e) {
	}

	@Override
	public void mouseEntered(MouseEvent e) {
	}

	@Override
	public void mouseExited(MouseEvent e) {
	}
}

public class MouseEventTest extends JFrame {
	public MouseEventTest() {
		setSize(300, 300);
		setTitle("๋งˆ์šฐ์Šค๋กœ ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		add(new MyPanel());
		setVisible(true);
	}

	public static void main(String[] args) {
		MouseEventTest s = new MouseEventTest();
	}
}

 

์–ด๋Œ‘ํ„ฐ ํด๋ž˜์Šค

  • ๋ฆฌ์Šค๋„ˆ์— ๋Œ€์‘๋˜๋Š” ์–ด๋Œ‘ํ„ฐ ํด๋ž˜์Šค (๋Œ€์‹  ๋‹ค์ค‘ ์ƒ์† ๋ถˆ๊ฐ€...)
  • ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋งŒ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๊ฐ€๋Šฅ (์›ํ•˜๋Š”๊ฒƒ๋งŒ ์ƒ์† ๋ฐ›์•„...)
์ธํ„ฐํŽ˜์ด์Šค ์–ด๋Œ‘ํ„ฐ ํด๋ž˜์Šค
ComponentListener ComponentAdapter
ContainerListener ContainerAdapter
FocusListener FocusAdapter
KeyListener KeyAdapter
MouseListener MouseAdapter
MouseMotionListener MouseMotionAdapter
WindowListener WindowAdapter

 

๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ → ๋ชจ๋‘ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

์–ด๋Œ‘ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ → ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(๋‹จ, ๋‹ค์ค‘ ์ƒ์† ๋ถˆ๊ฐ€)


ํ•™์Šต๋‚ด์šฉ ์ดํ•ด๋„

85% ์ •๋„

 

ํ•™์Šตํ™œ๋™ ๋Œ์•„๋ณด๊ธฐ

์ €๋ฒˆ์— ๋ฐฐ์šด ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์—ฐ์žฅ์„ ์ด๋ผ ๋งค์šฐ ์–ด๋ ต์ง€๋Š” ์•Š์•˜๋‹ค. ๋‹ค๋งŒ, ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ ์šฉํ•˜๋Š” ์˜ˆ์ œ๊ฐ€ ๋‹ค์†Œ ๋ณต์žกํ•ด ์–ด๋ ต๊ฒŒ ๋Š๊ปด์กŒ๋‹ค. ์ฝ”๋“œ ํ•˜๋‚˜ํ•˜๋‚˜ ์ดํ•ดํ•ด ๊ฐ€๋ฉฐ ๋ณต์Šตํ•˜๋‹ˆ, ๊ทธ๋‚˜๋งˆ ๊ดœ์ฐฎ์•˜๋‹ค.

์ž๋™์ฐจ ์ด๋ฏธ์ง€ ์ด๋™ ์˜ˆ์ œ๊ฐ€ ํŠนํžˆ ๋ณต์žกํ–ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณต ๋ณต์Šต ํ•ด์•ผ๊ฒ ๋‹ค.

 

๋‹ค์Œ ํ•™์Šต๊ณ„ํš

์Šค์œ™ ์ปดํฌ๋„ŒํŠธ์˜ ํ™œ์šฉ