독립 클래스로 Action 이벤트의 리스너 작성
import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class IndepClassListener extends JFrame { public IndepClassListener() { setTitle("Action 이벤트 리스너 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(new FlowLayout()); JLabel label1 = new JLabel("버튼을클릭하면'Action'에서'액션'으로변경"); JLabel label2 = new JLabel("다시클릭하면반대로'액션'에서'Action'으로변경"); label1.setLocation(130, 50); // label를(130,50) 위치로지정 label2.setLocation(130, 90); // label를(130,90) 위치로지정 label1.setSize(200, 20); // label를200x20 크기로지정 label2.setSize(200, 20); // label를200x20 크기로지정
c.add(label1); // label1를컨텐트팬에부착 c.add(label2); // label2를컨텐트팬에부착
JButton btn = new JButton("Action"); btn.addActionListener(new MyActionListener()); // Action 이벤트 리스너 달기 c.add(btn);
setSize(350, 150); setVisible(true); } public static void main(String [] args) { new IndepClassListener(); } } // 독립된 클래스로 이벤트 리스너를 작성한다. class MyActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { JButton btn0 = (JButton)e.getSource(); // 이벤트 소스 버튼 알아내기 if(btn0.getText().equals("Action")) // 버튼의 문자열이 "Action"인지 비교 btn0.setText("액션"); // 버튼의 문자열을 "액션"으로 변경 else btn0.setText("Action"); // 버튼의 문자열을 "Action"으로 변경 } } |
실행 결과]
내부 클래스(inner class)로 이벤트 리스너 작성
import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class InnerClassListener extends JFrame { public InnerClassListener() { setTitle("Action 이벤트 리스너 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(new FlowLayout()); JLabel("버튼클릭시제목과버튼이름이'Action'에서'액션'으로변경"); JLabel label2 = new JLabel("다시클릭하면반대로'액션'에서'Action'으로변경"); label1.setLocation(130, 50); // label를(130,50) 위치로지정 label2.setLocation(130, 90); // label를(130,90) 위치로지정 label1.setSize(200, 20); // label를200x20 크기로지정 label2.setSize(200, 20); // label를200x20 크기로지정
c.add(label1); // label1를컨텐트팬에부착 c.add(label2); // label2를컨텐트팬에부착
JButton btn = new JButton("Action"); btn.addActionListener(new MyActionListener()); // Action 이벤트 리스너 달기 c.add(btn);
setSize(350, 150); setVisible(true); } // 내부 클래스로 Action 리스너를 작성한다. private class MyActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { JButton b = (JButton)e.getSource(); if(b.getText().equals("Action")) b.setText("액션"); else b.setText("Action");
// InnerClassListener의 멤버나 JFrame의 멤버를 호출할 수 있음 InnerClassListener.this.setTitle(b.getText()); // 프레임의 타이틀에 버튼 문자열을 출력한다. } } public static void main(String [] args) { new InnerClassListener(); } } |
실행 결과]
익명 클래스로 Action 이벤트 리스너 만들기
import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class AnonymousClassListener extends JFrame { public AnonymousClassListener() { setTitle("Action 이벤트 리스너 작성"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(new FlowLayout()); JLabel label1 = new JLabel("버튼클릭시제목과버튼이름'Action'에서'액션'으로변경"); label1.setLocation(130, 50); // label를(130,50) 위치로지정 label1.setSize(350, 20); // label를200x20 크기로지정
c.add(label1);
JButton btn = new JButton("Action"); c.add(btn); btn.addActionListener(new ActionListener() { // 익명 클래스 public void actionPerformed(ActionEvent e) { JButton btn = (JButton)e.getSource(); if(btn.getText().equals("Action")) btn.setText("액션"); else btn.setText("Action");
// AnonymousClassListener의 멤버나 JFrame의 멤버를 호출할 수 있음 setTitle(btn.getText()); } });
setSize(350, 150); setVisible(true); } public static void main(String [] args) { new AnonymousClassListener(); } } |
실행 결과]
켄턴트펜의 아무 위치에 마우스 버튼을 누르면 마우스 포인터가 있는 위치로 "Hello" 문자열을 옮기는 프로그램을 작성하시오.(리스너 인터페이스를 상속받아 이벤트 리스너를 구현할 때 리스너 인터페이스의 메소드를 모두 구현해야 한다.)
import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class MouseListenerEx extends JFrame { private JLabel la = new JLabel("마우스좌표"); // "Hello" 문자열을 출력하기 위한 레이블 컴포넌트
public MouseListenerEx() { setTitle("Mouse 이벤트 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.addMouseListener(new MyMouseListener()); // 컨텐트팬에 이벤트 리스너 달기
c.setLayout(null); // 컨텐트팬의 배치관리자 삭제 la.setSize(70, 20); // 레이블의 크기 50x20 설정 la.setLocation(30, 30); // 레이블의 위치 (30,30)으로 설정 c.add(la); // 레이블 컴포넌트 삽입
setSize(250, 250); setVisible(true); }
// Mouse 리스너 구현 class MyMouseListener implements MouseListener { public void mousePressed(MouseEvent e) { // 이곳 부터 아래의 메소드는 모두 구현한 것 int x = e.getX(); // 마우스 클릭 좌표 x int y = e.getY(); // 마우스 클릭 좌표 y la.setLocation(x, y); // 레이블의 위치를 (x,y)로 이동 } public void mouseReleased(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }
public static void main(String [] args) { new MouseListenerEx(); } } |
실행 결과]
켄턴트펜의 아무 위치에 마우스 버튼을 누르면 마우스 포인터가 있는 위치로 "Hello" 문자열을 옮기는 프로그램을 작성하시오.(리스너 인터페이스를 미리 구현해 놓은 어댑터 클래스 사용하기)
import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class MouseAdapterEx extends JFrame { private JLabel la = new JLabel("마우스좌표"); // "Hello" 문자열을 출력하기 위한 레이블 컴포넌트
public MouseAdapterEx() { setTitle("Mouse 이벤트 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.addMouseListener(new MyMouseAdapter()); // 컨텐트팬에 Mouse 이벤트 리스너 달기
c.setLayout(null); // 컨텐트팬의 배치관리자 삭제 la.setSize(70, 20); // 레이블의 크기 50x20 설정 la.setLocation(30, 30); // 레이블의 위치 (30,30)으로 설정 c.add(la); // 레이블 컴포넌트 삽입
setSize(250, 250); setVisible(true); }
class MyMouseAdapter extends MouseAdapter { // MouseAdapter를 상속받아 리스너 구현 public void mousePressed(MouseEvent e) { int x = e.getX(); // 마우스 클릭 좌표 x int y = e.getY(); // 마우스 클릭 좌표 y la.setLocation(x, y); // 레이블의 위치를 (x,y)로 이동 } }
public static void main(String [] args) { new MouseAdapterEx(); } } |
실행 결과]
'프로그램언어 > 자바' 카테고리의 다른 글
이벤트 리스너 예제3 (0) | 2020.11.04 |
---|---|
이벤트 리스너 예제2 (0) | 2020.11.03 |
이벤트 처리하기 (0) | 2020.11.02 |
GUI문제1 (0) | 2020.11.02 |
컨테이너와 배치 (0) | 2020.11.02 |