본문 바로가기

프로그램언어/자바

이벤트 리스너 예제1

독립 클래스로 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);            // label200x20 크기로지정

        label2.setSize(200, 20);            // label200x20 크기로지정

 

        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);     // label200x20 크기로지정

        label2.setSize(200, 20);     // label200x20 크기로지정

 

        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); // label200x20 크기로지정

 

        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.setText("(" + x + ", " + 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.setText("(" + x + ", " + 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