implements 사용
package ch05;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ColorChangeFrame extends JFrame implements ActionListener {
// 이벤트 리스너에 대한 개념을 이해하자.
private JButton button1;
public ColorChangeFrame() {
initData();
setInitLayou();
addEventListener();
}
private void initData() {
setTitle("Swing5");
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button1 = new JButton("button1");
}
private void setInitLayou() {
setLayout(new FlowLayout());
add(button1);
setVisible(true);
}
private void addEventListener() {
button1.addActionListener(this);
}
// 코드 테스트
public static void main(String[] args) {
new ColorChangeFrame();
} // end of main
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("actionPerformed 메서드 호출() " +e);
}
} // end of class
implements 사용
package ch05;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
// 이벤트 리스너를 사용하는 방법
// 1. implements ActionListener 사용 하는 방법
// ActionListener --> 운영 체제가 제어하는 이벤트를 등록할 수 있다.
public class ColorChangeFrame extends JFrame implements ActionListener {
// 이벤트 리스너에 대한 개념을 이해하자.
private JButton button1;
public ColorChangeFrame() {
initData();
setInitLayou();
addEventListener();
}
private void initData() {
setTitle("Swing5");
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button1 = new JButton("button1");
}
private void setInitLayou() {
setLayout(new FlowLayout());
add(button1);
setVisible(true);
}
private void addEventListener() {
// button1이 눌러지는지 계속 이벤트를 지켜 보고 있어
// 이벤트 등록
// this가 사용되는 이유 인터페이스 implements ActionListener로 인해 this가 사용된다.
button1.addActionListener(this);
}
// 코드 테스트
public static void main(String[] args) {
new ColorChangeFrame();
} // end of main
// 약속 되어 있던 추상 메서드를 오버라이드 했다.
// 이벤트가 발생 되면 이 메서드를 수행해 약속 되어 있음
// 단, 어떤 컴포넌트가 이벤트가 할당 되었는지 등록을 먼저 해주어야 한다.
@Override
public void actionPerformed(ActionEvent e) {
// 매개변수 e
System.out.println("actionPerformed 메서드 호출() ");
System.out.println(e.toString());
}
} // end of class
2번째 방법 implement 없이
package ch05;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;
public class ColorChangeFrame2 extends JFrame {
private JPanel panel;
private JButton button1;
private JButton button2;
public ColorChangeFrame2() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setTitle("Swing 5");
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout()); // BorderLayout
panel = new JPanel();
panel.setBackground(Color.yellow);
button1 = new JButton("click1");
}
private void setInitLayout() {
add(button1, BorderLayout.NORTH);
add(panel, BorderLayout.CENTER);
setVisible(true);
}
private void addEventListener() {
// 이벤트 리스너를 구현하는 두번째 방법
button1.addActionListener(new ActionListener() {
// 인터페이스는 new를 사용하지 못하기 때문에 구현 클래스로 만들었다.
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("button1 이 눌러졌어요.");
}
});
}
// 코드 테스트
public static void main(String[] args) {
new ColorChangeFrame2();
}
}
implements 사용 (풀어봄)
package ch05;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;
public class ColorChangeFrame2 extends JFrame implements ActionListener {
private JPanel panel;
private JButton button1;
private JButton button2;
public ColorChangeFrame2() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setTitle("Swing 5");
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout()); // BorderLayout
panel = new JPanel();
panel.setBackground(Color.yellow);
button1 = new JButton("click1");
button2 = new JButton("click2");
}
private void setInitLayout() {
add(button1, BorderLayout.NORTH);
add(button2, BorderLayout.SOUTH);
add(panel, BorderLayout.CENTER);
setVisible(true);
}
// 이 메서드에 책임은 이벤트 리스너만 등록
private void addEventListener() {
button1.addActionListener(this);
button2.addActionListener(this);
}
// 오버라이드 : 이벤트가 일어나면 호출 되어지는 메서드
@Override
public void actionPerformed(ActionEvent e) {
Object object = e.getSource();
JButton selectedButton = (JButton) e.getSource();
if (object == button1) {
System.out.println("버튼1 ");
panel.setBackground(Color.black);
} else if (object == button2) {
System.out.println("버튼2 ");
panel.setBackground(Color.yellow);
}
// System.out.println(object);
// System.out.println(button1);
// System.out.println(button2);
// System.out.println(e.getSource().toString());
}
// 코드 테스트
public static void main(String[] args) {
new ColorChangeFrame2();
}
}
(풀이)
package ch05;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;
public class ColorChangeFrame2 extends JFrame implements ActionListener {
private JPanel panel;
private JButton button1;
private JButton button2;
public ColorChangeFrame2() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setTitle("Swing 5");
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout()); // BorderLayout
panel = new JPanel();
panel.setBackground(Color.yellow);
button1 = new JButton("click1");
button2 = new JButton("click2");
}
private void setInitLayout() {
add(button1, BorderLayout.NORTH);
add(button2, BorderLayout.SOUTH);
add(panel, BorderLayout.CENTER);
setVisible(true);
}
// 이 메서드에 책임은 이벤트 리스너만 등록
private void addEventListener() {
button1.addActionListener(this);
button2.addActionListener(this);
}
// 콜백 메서드
// ex) 알람예약을 4시에 맞춰놓고 4시에 집에갈 예정이다.
// 시간이 지나 4시가 되면 알람이 울려서 집에간다.
// 콜백 메서드이다.
// 오버라이드 : 이벤트가 일어나면 호출 되어지는 메서드
@Override
public void actionPerformed(ActionEvent e) {
Object object = e.getSource();
JButton selectedButton = (JButton) e.getSource();
if (object == button1) {
System.out.println("버튼1 ");
panel.setBackground(Color.black);
} else if (object == button2) {
System.out.println("버튼2 ");
panel.setBackground(Color.yellow);
}
// System.out.println(object);
// System.out.println(button1);
// System.out.println(button2);
// System.out.println(e.getSource().toString());
}
// 코드 테스트
public static void main(String[] args) {
new ColorChangeFrame2();
}
}
도전 문제
직접 풀어보기
package ch05;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class swing5_ extends JFrame implements ActionListener {
// 버튼
private JButton button1;
private JButton button2;
// 패널
private JPanel panel1;
private JPanel panel2;
public swing5_() {
initData();
setInitLayout();
addEventListener();
} // 생성자
private void initData() {
setTitle("Swing5_ 도전연습");
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel1 = new JPanel();
panel1.setBackground(Color.blue);
panel2 = new JPanel();
panel2.setBackground(Color.green);
button1 = new JButton("button1");
button2 = new JButton("button2");
}
private void setInitLayout() {
// 루트 패널 --> BorderLayout
add(panel1, BorderLayout.CENTER);
add(panel2, BorderLayout.SOUTH);
panel2.add(button1);
panel2.add(button2);
setVisible(true);
}
public void addEventListener() {
button1.addActionListener(this);
button2.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
Object object = e.getSource();
if (object == button1) {
panel1.setBackground(Color.black);
} else if (object == button2) {
panel1.setBackground(Color.yellow);
}
}
public static void main(String[] args) {
new swing5_();
}
}
'Java' 카테고리의 다른 글
| 2024.04.30 JAVA 유용한 클래스 디자인 패턴 템플릿 메서드 패턴 (0) | 2024.04.30 |
|---|---|
| 2024.04.30 JAVA 유용한 클래스 디자인 패턴 싱글톤 패턴 (0) | 2024.04.30 |
| 2024.04.29 Swing - 4 (이미지 겹치는 방법) (0) | 2024.04.29 |
| 2024.04.29 Swing - 3 (이미지 올리기) (0) | 2024.04.29 |
| 2024.04.29 JAVA 유용한 클래스 Exception(예외처리) (0) | 2024.04.29 |