Framework & Library/Swing

[Swing] ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (Event Handling)

๊ต ๋ฏผ 2024. 9. 5. 21:04

๐Ÿ“Œ ์ด๋ฒคํŠธ : ์‚ฌ์šฉ์ž๊ฐ€ UI ์ปดํฌ๋„ŒํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์‚ฌ๊ฑด

 

์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์ด๋ฒคํŠธ ์†Œ์Šค(Source), ์ด๋ฒคํŠธ ๊ฐ์ฒด(Object), ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ(Listener)๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  • ์ด๋ฒคํŠธ ์†Œ์Šค : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ์ฒด
  • ์ด๋ฒคํŠธ ๊ฐ์ฒด : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋กœ, ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค.
    • ๋ชจ๋“  ์ด๋ฒคํŠธ ๊ฐ์ฒด๋Š” EventObject ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค. EventObject ํด๋ž˜์Šค๋Š” getSource() ๋ฉ”์„œ๋“œ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. getSource()๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ, Object ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ์— ํ•„์š”ํ•œ ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 
  • ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋™์ž‘์„ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ, ์ˆ˜์‹ ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    • ๋“ฑ๋ก๋œ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์—†๋‹ค๋ฉด ์•„๋ฌด ์ผ๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

< ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง€ >

import java.awt.event.*;

 

 

 

< ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„ >

  1. ์ด๋ฒคํŠธ ์†Œ์Šค ์ƒ์„ฑ : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ
  2. ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก : ์‚ฌ์šฉ์ž๋Š” ๋ฆฌ์Šค๋„ˆ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ํ•ด๋‹น ๋ฆฌ์Šค๋„ˆ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์™€ ์—ฐ๊ฒฐํ•ด์•ผ ํ•œ๋‹ค.
    • ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ž‘์„ฑ๋ฒ•
      1. ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
      2. ์ด๋ฒคํŠธ ์†Œ์Šค์— ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก
  3. ์ด๋ฒคํŠธ ๋ฐœ์ƒ ๋ฐ ์ฒ˜๋ฆฌ : ์‚ฌ์šฉ์ž๊ฐ€ ์ปดํฌ๋„ŒํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ๋•Œ, ์ง€์ •ํ•œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋ฆฌ์Šค๋„ˆ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

์ฃผ์š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค
ActionListener ๋ฒ„ํŠผ ํด๋ฆญ, ๋ฉ”๋‰ด ์„ ํƒ๊ณผ ๊ฐ™์€ ์•ก์…˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
KeyListener ํ‚ค๋ณด๋“œ ์ž…๋ ฅ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
MouseListener ๋งˆ์šฐ์Šค ํด๋ฆญ ๋ฐ ์›€์ง์ž„ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
WindowListener ์ฐฝ์„ ์—ด๊ณ ๋‹ซ๋Š” ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ 
FocusListener ์ปดํฌ๋„ŒํŠธ๊ฐ€ focus๋ฅผ ์–ป๊ณ  ์žƒ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

 

 

์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๊ตฌํ˜„๋ฒ•

 

  1. ๋ณ„๋„์˜ ํด๋ž˜์Šค์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
    • ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
  2. ๋ฆฌ์Šค๋„ˆ ํด๋ž˜์Šค๋ฅผ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑ
    : ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค ์•ˆ์— ์œ„์น˜ํ•˜๋Š” ํด๋ž˜์Šค๋กœ, ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋“ค์„ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
  3. MyFrame ํด๋ž˜์Šค์˜ JFrame ์ƒ์† ๋ฐ ActionListener ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
    • MyFrame ํด๋ž˜์Šค ์•ˆ์—๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋‹ด์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  4. ๋ฌด๋ช… ํด๋ž˜์Šค ์‚ฌ์šฉ
    : ์ด๋ฆ„์ด ์—†๋Š” ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
    • ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํžˆ์—ฌ ํŠน์ • ์ด๋ฒคํŠธ๋งŒ ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. 

๐Ÿ“„ ๋ฌด๋ช… ํด๋ž˜์Šค ์‚ฌ์šฉ ์ฝ”๋“œ ( ํ˜•์‹ ์ดํ•ดํ•˜๊ธฐ )

import javax.swing.*;
import java.awt.event.*;

public class EventExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Event Example");
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
        JButton button = new JButton("Click Me");
        //๋ฌด๋ช… ํด๋ž˜์Šค๋Š” ActionListener ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. 
        button.addActionListener(new ActionListener() {
            @Override
            // ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค Button clicked!๊ฐ€ ์ถœ๋ ฅํ•˜๋„๋ก ์ •์˜
            public void actionPerformed(ActionEvent e) {
                System.out.println("Button clicked!");
            }
        });

        frame.add(button);
        frame.setVisible(true);
    }
}

 

 

๐Ÿ“ ์•ก์…˜ ์ด๋ฒคํŠธ (Action Event)

 : ์‚ฌ์šฉ์ž์˜ ํŠน์ • ์•ก์…˜์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ

  • ์ฃผ์š” ์•ก์…˜ ๋ฐœ์ƒ ์ปดํฌ๋„ŒํŠธ
    • JButton : ๋ฒ„ํŠผ ํด๋ฆญ
    • JMenuItem : ๋ฉ”๋‰ด ์„ ํƒ
    • JTextField : ํ…์ŠคํŠธ ํ•„๋“œ์—์„œ์˜ ์—”ํ„ฐํ‚ค ํด๋ฆญ
  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• : ActionListener ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„.
    • ActionListener ์ธํ„ฐํŽ˜์ด์Šค๋Š” actionPerformed(ActionEvent e)๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
      ํ•ด๋‹น ๋ฉ”์„œ๋“œ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

๐Ÿ“ ํ‚ค ์ด๋ฒคํŠธ (Key Event)

 : ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆ„๋ฅผ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ

  • ์ฃผ์š” ์•ก์…˜ ๋ฐœ์ƒ ์ปดํฌ๋„ŒํŠธ
    • keyTyped(KeyEvent e) : ๋ฌธ์ž ์ž…๋ ฅ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
    • keyPressed(KeyEvent e) : ํ‚ค๋ณด๋“œ๊ฐ€ ๋ˆŒ๋ ธ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ  
    • keyReleased(KeyEvent e) : ํ‚ค๋ณด๋“œ์—์„œ ๋–ผ์–ด์กŒ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• : KeyListener ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
    • KeyListener ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์œ„์˜ ์•ก์…˜ ๋ฐœ์ƒ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฉ”์„œ๋“œ 3๊ฐ€์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ํ‚ค ์ด๋ฒคํŠธ์˜ ํด๋ž˜์Šค
    int getKeyChar() ํ‚ค ์ด๋ฒคํŠธ์— ๋“ค์–ด์žˆ๋Š” ๊ธ€์ž(์œ ๋‹ˆ์ฝ”๋“œ) ๋ฐ˜ํ™˜
    int getKeyCode() ํ‚ค ์ด๋ฒคํŠธ์— ๋“ค์–ด์žˆ๋Š” ์žํŒ์˜ ํ‚ค ์ฝ”๋“œ ๋ฐ˜ํ™˜

 

๐Ÿ“ ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ (Mouse Event)

: ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์šฐ์Šค๋ฅผ ์‚ฌ์šฉํ•œ ์ž…๋ ฅ์„ ํ•˜์˜€์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ

  • ์ •์  ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ : ๋งˆ์šฐ์Šค์˜ ์ƒํƒœ๊ฐ€ ํŠน์ • ์‹œ์ ์— ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
    (ํด๋ฆญ, ๋ˆŒ๋ฆผ ๋–ผ์–ด์ง ๋“ฑ) 
    • MouseListener ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ
  • ๋™์  ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ : ๋งˆ์šฐ์Šค๊ฐ€ ์›€์ง์ด ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ
    (์ด๋™, ๋“œ๋ ˆ๊ทธ ๋“ฑ) 
    • MouseMotionListener ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ

 

๐Ÿ’ซ์–ด๋Žํ„ฐ ํด๋ž˜์Šค๐Ÿ’ซ

 

์–ด๋ŽํŠธ ํด๋ž˜์Šค์˜ ํ•„์š”์„ฑ : ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณต๋˜๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ์Šค๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•œ ํด๋ž˜์Šค์ด๋‹ค.

  • ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ•์ œ๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ์—, ์ฝ”๋“œ ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•ด์ง„๋‹ค.
  • ์ฝ”๋“œ ๊ฐ„๊ฒฐํ™”
  • ์œ ์—ฐ์„ฑ
  • ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

 

๋Œ€ํ‘œ์ ์ธ ์–ด๋Žํ„ฐ ํด๋ž˜์Šค

์ธํ„ฐํŽ˜์ด์Šค ์–ด๋Žํ„ฐ ํด๋ž˜์Šค 
ComponentListener ComponentAdapter
ContainerListener ContainerAdapter
FocusListener FocusAdapter
KeyListener KeyAdapter
MouseListener MouseAdapter
MouseMotionListener MouseMotionAdapter
WindowListener WindowAdapter

 

 

๐Ÿ“„ ์–ด๋Žํ„ฐ ํด๋ž˜์Šค์‚ฌ์šฉ ์˜ˆ์‹œ ์ฝ”๋“œ

import javax.swing.*;
import java.awt.event.*;

public class MouseAdapterExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Mouse Adapter Example");
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton button = new JButton("Click Me");
        //MouseListener์ด ์•„๋‹Œ MouseAdapter์„ ์‚ฌ์šฉ
        button.addMouseListener(new MouseAdapter() {
            @Override
            // ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ mouseClicked๋งŒ ์˜ค๋ฒ„๋ผ์ด๋“œ
            // ์žฌ์ •์˜ํ•˜์ง€ ์•Š์€ ๋ถˆํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ ๊ตฌํ˜„ ์ƒํƒœ 
            public void mouseClicked(MouseEvent e) {
                System.out.println("Mouse clicked!");
            }
        });

        frame.add(button);
        frame.setVisible(true);
    }
}

 

โ€ป ์–ด๋Žํ„ฐ ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ ํด๋ž˜์Šค ํŠน์„ฑ์ƒ "์ƒ์†"์„ ํ•ด์•ผํ•˜๋ฏ€๋กœ, ๋ฉ”์„œ๋“œ ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•˜์ง€๋งŒ ๋‹ค์ค‘ ์ƒ์†์ด ์•ˆ ๋œ๋‹ค๋Š” ์œ ์˜์‚ฌํ•ญ์ด ์žˆ๋‹ค. 

โ€ป ๋ฆฌ์Šค๋„ˆ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ, ๋ฉ”์„œ๋“œ๋ฅผ ์ „๋ถ€ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์ง€๋งŒ ๋‹ค์ค‘์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— ํ•„์š”์— ์˜ํ•ด ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.