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

Study/Java

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

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

2022.05.03/2022.05.08

 

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

 

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

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

์ด๋ฒคํŠธ-๊ตฌ๋™ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

โ‘  ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค.

 โ€ป ๋ฒ„ํŠผ์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฃผ์ฒด(ํ‚ค๋ณด๋“œ ๋ˆŒ๋ฆผ, ๋งˆ์šฐ์Šค ์›€์ง์ž„ ๋“ฑ๋„ ์ฃผ์ฒด๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ)

โ‘ก ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 โ€ป ์ด๋ฒคํŠธ ๊ฐ์ฒด๊ฐ€ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง

โ‘ข ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 โ€ป ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค, Listener๋ผ๊ณ  ํ•จ

โ‘ฃ ์–ด๋–ค ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค.

 

์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ

๋ฐœ์ƒ๋œ ์ด๋ฒคํŠธ ๊ฐ์ฒด์— ๋ฐ˜์‘ํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ์ฒด

โ€ป ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋Š” ๊ฐ์ฒด ์ƒ์„ฑ๋ถˆ๊ฐ€

 

์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๊ณผ์ •

// (1) ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๊ตฌํ˜„(5๊ฐ€์ง€ ๋ฐฉ๋ฒ•)
class MyListener implements ActionListener{	// ActionListener: ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
	public void actionPerformed(ActionEvents e){	// ์˜ค๋ฒ„๋ผ์ด๋”ฉ
    	// Action ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ
    }
}

// (2) ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ด๋ฒคํŠธ ์†Œ์Šค(์ด๋ฒคํŠธ ๋ฐœ์ƒ ์ฃผ์ฒด)์— ๋“ฑ๋ก
public class MyFrame extends JFrame{
	public MyFlame(){
    	button = new JButton("๋™์ž‘");
        buttons.addActionListener(new MyListener());	// buttons: ์ด๋ฒคํŠธ๋ฐœ์ƒ์ฃผ์ฒด, addActionListener: ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋“ฑ๋ก์‹œํ‚ค๋Š” ๋„๊ตฌ
    }
}

์ด๋ฒคํŠธ ๊ฐ์ฒด

  • EventObjectํด๋ž˜์Šค์˜ ํŒŒ์ƒ ํด๋ž˜์Šค
  • (ex) MouseEvent ํด๋ž˜์Šค

                   java.lang.Object

                        java.util.EventObject

                            java.awt.AWTEvent

                                  java.awt.event.ComponentEvent

                                       java.awt.event.InputEvent

                                           java.awt.event.MouseEvent

 

  • ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ์ด๋ฒคํŠธ ์†Œ์Šค ๋“ฑ, ์ด๋ฒคํŠธ ๊ด€๋ จ ์ •๋ณด ์ œ๊ณต
public void actionPerFormed(ActionEvent e){	// ActionEvent: ์•ก์…˜ ์ด๋ฒคํŠธ ๊ฐ์ฒด
	button = (JButton)e.getSource();	// JButton: ํ˜•๋ณ€ํ™˜, e.getSource(): ๋งค๊ฐœ๋ณ€์ˆ˜์—†๋Š” ๋ฉ”์†Œ๋“œ
    ...
}

 

๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ• - 5๊ฐ€์ง€

  1. ๋…๋ฆฝ์ ์ธ ํด๋ž˜์Šค๋กœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์ž‘์„ฑ
  2. ๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์ž‘์„ฑ
  3. ํ”„๋ ˆ์ž„ ํด๋ž˜์Šค๋กœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„
  4. ๋ฌด๋ช… ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  5. ๋žŒ๋‹ค์‹์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

โ€ป 1 ~ 3๋ฒˆ: ํด๋ž˜์Šค implements

 

#1 : Step1. Listener ๊ตฌํ˜„, #2: Step2. ๋“ฑ๋ก

1. ๋…๋ฆฝ์ ์ธ ํด๋ž˜์Šค ์ž‘์„ฑ

import javax.swing.*;

class MyListener implements ActionListener{
	public void actionPerformed(ActionEvent e){
    	JButton button = (JButton)e.getSource();	// ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์ฃผ์ฒด๋ฅผ getํ•ด ์˜ด
        button.setText("๋งˆ์นจ๋‚ด ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์กŒ์Šต๋‹ˆ๋‹ค.");	// #1 - ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ
		// label.setText("๋งˆ์นจ๋‚ด ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์กŒ์Šต๋‹ˆ๋‹ค.");
    }
}

class MyFrame extends JFrame {
	private JButton button;
	private JLabel label;

	public MyFrame() {
		this.setSize(300, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("์ด๋ฒคํŠธ ์˜ˆ์ œ");

		JPanel panel = new JPanel();
		button = new JButton("๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์‹œ์˜ค");

		label = new JLabel("์•„์ง ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค");
		button.addActionListener(new MyListener());		// #2 - ๋“ฑ๋ก, new MyListener(): ์‹ค๋งค๊ฐœ๋ณ€์ˆ˜/๋ฌด๋ช…์ต๋ช…๊ฐ์ฒด
		panel.add(button);
		panel.add(label);
		this.add(panel);
		this.setVisible(true);
	}
}

public class ActionEventTest1 {
	public static void main(String[] args) {
		MyFrame t = new MyFrame();
	}
}

 

2. ๋‚ด๋ถ€ ํด๋ž˜์Šค ๋ฐฉ๋ฒ•

  • MyListener๊ฐ€ ๋ณ„๋„์˜ ํด๋ž˜์Šค๋ฉด MyFrame์˜ Private ๋ฉค๋ฒ„์— ์ ‘๊ทผ ๋ถˆ๊ฐ€
  • ๋ฆฌ์Šค๋„ˆ ํด๋ž˜์Šค๋ฅผ ํ”„๋ ˆ์ž„ ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ ์„ ์–ธํ•ด ํ•ด๊ฒฐ
import javax.swing.*;

class MyFrame extends JFrame {
	private JButton button;
	private JLabel label;

	public MyFrame() {
		this.setSize(300, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("์ด๋ฒคํŠธ ์˜ˆ์ œ");

		JPanel panel = new JPanel();
		button = new JButton("๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์‹œ์˜ค");
		label = new JLabel("์•„์ง ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค");
		button.addActionListener(new MyListener());	
		panel.add(button);
		panel.add(label);

		this.add(panel);
		this.setVisible(true);
	}

	private class MyListener implements ActionListener {	// ๋‚ด๋ถ€ ํด๋ž˜์Šค
		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == button) {
				label.setText("๋งˆ์นจ๋‚ด ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์กŒ์Šต๋‹ˆ๋‹ค.");
			}
		}
	}
}

public class ActionEventTest2 {
	public static void main(String[] args) {
		MyFrame t = new MyFrame();
	}
}

 

3. MyFrame ํด๋ž˜์Šค๊ฐ€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

  • MyFrame ํด๋ž˜์Šค๊ฐ€, JFrame ํด๋ž˜์Šค ์ƒ์†(ํ”„๋ ˆ์ž„ ์—ญํ• ) / ActionListener ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„(์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ)
  • ์ฆ‰, ํ”„๋ ˆ์ž„ ํด๋ž˜์Šค๊ฐ€ actionPerformed(ActionEvent e)๋ฅผ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋กœ ์ง์ ‘ overriding
import javax.swing.*;

class MyFrame extends JFrame implements ActionListener {	// MyFrame - Frame์˜ ํ•œ ์ข…๋ฅ˜, ActionPerFormed ์˜ค๋ฒ„๋ผ์ด๋”ฉ
	
    private JButton button;
	private JLabel label;

	public MyFrame() {	// #2 - ๋“ฑ๋ก
		this.setSize(280, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("์ด๋ฒคํŠธ ์˜ˆ์ œ");

		JPanel panel = new JPanel();
		button = new JButton("๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์‹œ์˜ค");

		label = new JLabel("์•„์ง ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค");
		button.addActionListener(this);	// this: ๋”ฐ๋กœ ์ด๋ฆ„x, ์ž๊ธฐ ์ž์‹ ์ด ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ
		panel.add(button);
		panel.add(label);

		this.add(panel);
		this.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent e) {	// #1 - ์ด๋ฒคํŠธ์ฒ˜๋ฆฌ์ฝ”๋“œ / ์˜ค๋ฒ„๋ผ์ด๋”ฉ
		if (e.getSource() == button) {
			label.setText("๋งˆ์นจ๋‚ด ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์กŒ์Šต๋‹ˆ๋‹ค.");
		}
	}
}

public class ActionEventTest3 {
	public static void main(String[] args) {
		MyFrame t = new MyFrame();
	}
}

 

4. ๋ฌด๋ช… ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ฌด๋ช…ํด๋ž˜์Šค: new๋กœ ์‹œ์ž‘, ๋ถ€๋ชจํด๋ž˜์Šค์ด๋ฆ„( ){ };

import javax.swing.*;

class MyFrame extends JFrame {

	private JButton button;
	private JLabel label;

	public MyFrame() {
		this.setSize(280, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("์ด๋ฒคํŠธ ์˜ˆ์ œ");

		JPanel panel = new JPanel();
		button = new JButton("๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์‹œ์˜ค");

		label = new JLabel("์•„์ง ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {	// ActionListener์—์„œ ๋ฐ›์€ ActionPerformed ์˜ค๋ฒ„๋ผ์ด๋”ฉ
				if (e.getSource() == button) {	// ๋ฐœ์ƒ์ฃผ์ฒด๋‹ˆ๊นŒ if ์—†์–ด๋„ ๋จ
					label.setText("๋งˆ์นจ๋‚ด ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์กŒ์Šต๋‹ˆ๋‹ค.");
				}
			}
		});					// new ActionListener()๋ถ€ํ„ฐ }๊นŒ์ง€ ๋ฌด๋ช…ํด๋ž˜์Šค
		panel.add(button);
		panel.add(label);

		this.add(panel);
		this.setVisible(true);
	}
}

public class ActionEventTest4 {
	public static void main(String[] args) {
		MyFrame t = new MyFrame();
	}
}

 

5. ๋žŒ๋‹ค์‹์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

import javax.swing.*;

class MyFrame extends JFrame {

	private JButton button;
	private JLabel label;

	public MyFrame() {
		this.setSize(280, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("์ด๋ฒคํŠธ ์˜ˆ์ œ");

		JPanel panel = new JPanel();
		button = new JButton("๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์‹œ์˜ค");

		label = new JLabel("์•„์ง ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค");
		button.addActionListener(e -> {		// ๋žŒ๋‹ค์‹: ( ) -> { } / returnํƒ€์ž…&์ด๋ฆ„ ํ•„์š”x, ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ํ•„์š”
			label.setText("๋งˆ์นจ๋‚ด ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์กŒ์Šต๋‹ˆ๋‹ค.");
		});

		panel.add(button);
		panel.add(label);

		this.add(panel);
		this.setVisible(true);
	}

}

public class ActionEventTest5 {
	public static void main(String[] args) {
		MyFrame t = new MyFrame();
	}
}

 

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

  • ์ €์ˆ˜์ค€ ์ด๋ฒคํŠธ: ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ๊ณตํ†ต์ ์œผ๋กœ ๋ฐœ์ƒ
  • ์˜๋ฏธ์  ์ด๋ฒคํŠธ: ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ ์ง€์›
๋”๋ณด๊ธฐ

์ €์ˆ˜์ค€ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋ณธ ์ด๋ฒคํŠธ๋ผ๊ณ  ์ดํ•ดํ•˜๊ธฐ

์ €์ˆ˜์ค€ ์ด๋ฒคํŠธ: Mouse, MouseMotion, Key, Component, Container, Focus, Window

์˜๋ฏธ์  ์ด๋ฒคํŠธ: Action, Adjustment, Document, Item, Text

 

์•ก์…˜ ์ด๋ฒคํŠธ

  1. ๋ฒ„ํŠผ ํด๋ฆญ
  2. ๋ฉ”๋‰ด ํ•ญ๋ชฉ ์„ ํƒ
  3. ํ…์ŠคํŠธ ํ•„๋“œ์—์„œ [enter key] ์ž…๋ ฅ
  4. ํƒ€์ด๋จธ ์ด๋ฒคํŠธ

 

์ด๋ฒคํŠธ ๋ฐœ์ƒ์›์˜ ์‹๋ณ„

  • getSource(): ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๊ฐ์ฒด(Object) ๋ฐ˜ํ™˜
  • getId(): ์ด๋ฒคํŠธ ํƒ€์ž…(int) ๋ฐ˜ํ™˜
  • getActionCommand(): ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„(String) ๋ฐ˜ํ™˜

 


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

75% ์ •๋„. ๊ทธ๋™์•ˆ ํ–ˆ๋˜ ๊ฒƒ์— ๋น„ํ•ด ๋” ์–ด๋ ต๋‹ค๊ณ  ๋Š๊ปด์ง„๋‹ค.

 

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

์ด๋ฒˆ์— ๋ฐฐ์šด ๋‚ด์šฉ์€ ๊ทธ ์ „ ๋‚ด์šฉ๋“ค๋ณด๋‹ค ๋” ์–ด๋ ต๋‹ค๊ณ  ๋Š๊ปด์กŒ๋‹ค. 5๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ , ์ด ๋ฐฉ๋ฒ•์„ ์ € ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ณ .. ActionListener, ActionPerformed, ActionEvent... ํ—ท๊ฐˆ๋ฆฐ๋‹ค. ์ดํ›„ ๋” ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค.

์ดํ›„ ๋” ๊ณต๋ถ€ํ•  ์ , ์˜๋ฌธ์ 

1. ActionListener์˜ ์—ญํ• (๊ฐ์ง€์ž์ธ๋ฐ ์ •ํ™•ํžˆ ์–ด๋–ค์ผ์„ ํ•˜๋Š”์ง€, ์–ด๋–ค ๋ฐฉ์‹์ธ์ง€)

2. ActionListener์™€ ActionPerfomred์™€ ActionEvent์˜ ๊ด€๊ณ„

 

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

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