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

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