6/19

ONLYS2545·2023년 6월 20일
0

이벤트 리스너



package gui.project.ex02;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Event01 extends JFrame {

    private JButton button;
    private JLabel label;
    int counter = 0;

    public Event01() {

        setSize(600, 200);
        setLayout(new FlowLayout());

        button = new JButton("증가");
        label = new JLabel("현재의 카운터 값" + counter);
        // 클래스가 아니라 메서드를 주입해야하는데, 언어 특성상 클래스 주입
        button.addActionListener(new Inner());
        add(button);
        add(label);

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    // 클래스 안의 클래스, 이 클래스에서만 사용할 때
    class Inner implements ActionListener {
		
        //콜백 메서드
        @Override
        public void actionPerformed(ActionEvent e) {
            JButton btn = (JButton) e.getSource();
            System.out.println("버튼 클릭됨 : " + e);
            System.out.println(btn.getText());

            counter++;
            System.out.println(counter);

            label.setText("현재의 카운터 값 : " + counter);

        }

    }

    public static void main(String[] args) {
        new Event01();

    }

}

Myframe.java


package gui.project.ex02;

import javax.swing.JFrame;

public class MyFrame extends JFrame {
    public MyFrame() {
        setSize(500, 200);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

}

버블 버블 실습


package test.ex03;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class BubbleFrame extends JFrame {

    private JLabel backgroundMap;
    private Player player;

    public BubbleFrame() {
        initObject();
        initSetting();
        initListener();
        setVisible(true);

    }

    private void initObject() {
        backgroundMap = new JLabel(new ImageIcon("image/backgroundMap.png"));
        player = new Player();

        setContentPane(backgroundMap);
        add(player);

    }

    private void initSetting() {

        setSize(1000, 640);
        setLayout(null);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setVisible(true);

    }

    private void initListener() {

        // 어댑터
        addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                System.out.println(e.getKeyCode());

                if (e.getKeyCode() == 39) {
                    player.right();

                } else if (e.getKeyCode() == 37) {
                    player.left();
                }
            }

        });

    }

    public static void main(String[] args) {
        new BubbleFrame();
    }

}

책 실습


package test.ex03;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class Player extends JLabel {

    private int x;
    private int y;

    private ImageIcon playerR, playerL;

    public Player() {

        initObject();
        initSetting();

    }

    public void initObject() {
        playerR = new ImageIcon("image/playerR.png");
        playerL = new ImageIcon("image/playerL.png");
    }

    private void initSetting() {
        x = 70;
        y = 535;

        setIcon(playerR);
        setSize(50, 50);
        setLocation(x, y);

    }

    public void right() {
        setIcon(playerR);
        x = x + 10;
        setLocation(x, y);

    }

    public void left() {
        setIcon(playerL);
        x = x - 10;
        setLocation(x, y);

    }

}

Event06.java

package gui.project.ex02;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

import okhttp3.Call;

// 1. 이벤트 소스
public class Event06 extends MyFrame {

    // 생성자 안에 변수선언 X, 바깥에서 사용 못함
    private JButton btn1, btn2;

    public Event06() {
        // 1. 컴포넌트 생성
        btn1 = new JButton("버튼1");
        btn2 = new JButton("버튼2");

        // 2. 컴포넌트를 컨테이너에 배치
        add(btn1, BorderLayout.NORTH);
        add(btn2, BorderLayout.SOUTH);

        // 3. 리스너 생성
        Callback call = new Callback(); // 콜백될 타겟 메서드

        btn1.addActionListener(call);
        btn2.addActionListener(call);

        // 4. 그림 그리기
        setVisible(true);

    }

    class Callback implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            // 이벤트가 어떤 타입인지 모르니 Object 타입으로 받음
            Object target = e.getSource();
            JButton btn = (JButton) target;
            System.out.println(btn.getText());
            System.out.println(btn.getX());
            System.out.println(btn.getY());
            System.out.println(btn.getHeight());
            System.out.println(btn.getWidth());

            if (btn.getText().equals("버튼1")) {
                //
                System.out.println("버튼1이 클릭되었습니다.");

            } else if (btn.getText().equals("버튼2")) {
                //
                System.out.println("버튼2가 클릭되었습니다.");
            }

        }

    }

    public static void main(String[] args) {
        new Event06();

    }

}

Event07.java

package gui.project.ex02;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

// 1. 이벤트 소스
public class Event07 extends MyFrame implements ActionListener {

    // 생성자 안에 변수선언 X, 바깥에서 사용 못함
    private JButton btn1, btn2;

    public Event07() {
        // 1. 컴포넌트 생성
        btn1 = new JButton("버튼1");
        btn2 = new JButton("버튼2");

        // 2. 컴포넌트를 컨테이너에 배치
        add(btn1, BorderLayout.NORTH);
        add(btn2, BorderLayout.SOUTH);

        btn1.addActionListener(this);
        btn2.addActionListener(this);

        // 4. 그림 그리기
        setVisible(true);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton btn2 = (JButton) e.getSource();
        if (btn2.getText().equals("버튼1")) {
            //
            System.out.println("버튼1이 클릭되었습니다.");

        } else if (btn2.getText().equals("버튼2")) {
            //
            System.out.println("버튼2가 클릭되었습니다.");
        }

    }

    public static void main(String[] args) {
        new Event07();

    }

}

Event08.java

package gui.project.ex02;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

// 1. 이벤트 소스
public class Event08 extends MyFrame {

    // 생성자 안에 변수선언 X, 바깥에서 사용 못함
    private JButton btn1, btn2;

    public Event08() {
        btn1 = new JButton("버튼1");
        btn2 = new JButton("버튼2");

        add(btn1, BorderLayout.NORTH);
        add(btn2, BorderLayout.SOUTH);
        setVisible(true);

        btn1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("버튼1이 클릭되었습니다");

            }

        });
        btn2.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("버튼2가 클릭되었습니다");

            }

        });

    }

    public static void main(String[] args) {
        new Event08();

    }

}

Event09.java

package gui.project.ex02;

import java.awt.BorderLayout;

import javax.swing.JButton;

// 1. 이벤트 소스
public class Event09 extends MyFrame {

    // 생성자 안에 변수선언 X, 바깥에서 사용 못함
    private JButton btn1, btn2;

    public Event09() {
        btn1 = new JButton("버튼1");
        btn2 = new JButton("버튼2");

        add(btn1, BorderLayout.NORTH);
        add(btn2, BorderLayout.SOUTH);

        // 메서드가 2개면 무명클래스
        btn1.addActionListener(e -> System.out.println("버튼1이 클릭됨"));
        btn2.addActionListener(e -> System.out.println("버튼2이 클릭됨"));
        setVisible(true);

    }

    public static void main(String[] args) {
        new Event09();

    }

}

책 예제


EventTest3.java

package gui.project.practice;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class EventTest3 extends JFrame implements ActionListener {

    private JButton button;
    private JLabel label;
    int counter = 0;

    @Override
    public void actionPerformed(ActionEvent e) {
        counter++;
        label.setText("현재의 카운터값:  " + counter);

    }

    public EventTest3() {
        setSize(400, 150);
        setTitle("이벤트 예제");

        JPanel panel = new JPanel();
        button = new JButton("증가");
        label = new JLabel("현재의 카운터 값: " + counter);
        button.addActionListener(this);
        panel.add(label);
        panel.add(button);
        add(panel);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    public static void main(String[] args) {
        EventTest3 t = new EventTest3();

    }
}

EventTest4.java

package gui.project.practice;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class EventTest4 extends JFrame {

    private JButton button;
    private JLabel label;
    int counter = 0;

    public EventTest4() {
        setSize(400, 150);
        setTitle("이벤트 예제");

        JPanel panel = new JPanel();
        button = new JButton("증가");
        label = new JLabel("현재의 카운터 값: " + counter);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                counter++;
                label.setText("현재의 카운터 값: " + counter);
            }
        });
        panel.add(label);
        panel.add(button);
        add(panel);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    public static void main(String[] args) {
        EventTest4 t = new EventTest4();

    }
}

EventTest5.java

package gui.project.practice;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class EventTest5 extends JFrame {

    private JButton button;
    private JLabel label;
    int counter = 0;

    public EventTest5() {
        setSize(400, 150);
        setTitle("이벤트 예제");

        JPanel panel = new JPanel();
        button = new JButton("증가");
        label = new JLabel("현재의 카운터 값: " + counter);
        button.addActionListener(e -> {
            counter++;
            label.setText("현재의 카운터값: " + counter);
        });
        panel.add(label);
        panel.add(button);
        add(panel);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    public static void main(String[] args) {
        EventTest5 t = new EventTest5();

    }
}

KeyEventTest.java

package gui.project.practice;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class KeyEventTest extends JFrame implements KeyListener {
    public KeyEventTest() {
        setTitle("이벤트 예제");
        setSize(300, 200);
        JTextField tf = new JTextField(20);
        tf.addKeyListener(this);
        add(tf);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    @Override
    public void keyTyped(KeyEvent e) {
        display(e, "keyTyped");
    }

    @Override
    public void keyPressed(KeyEvent e) {
        display(e, "keyPressed");

    }

    @Override
    public void keyReleased(KeyEvent e) {
        display(e, "Key Realeasd");
    }

    protected void display(KeyEvent e, String s) {
        char c = e.getKeyChar();
        int keyCode = e.getKeyCode();
        String modifiers = e.isAltDown() + " " + e.isControlDown() + " " + e.isShiftDown();
        System.out.println(s + " " + keyCode + " " + modifiers);

    }

    public static void main(String[] args) {
        KeyEventTest f = new KeyEventTest();

    }
}

LabelTest.java

package gui.project.practice;

import java.awt.Color;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class LAbelTest extends JFrame {

    private JPanel panel;
    private JLabel label1, label2;

    public LAbelTest() {
        setTitle("레이블 테스트");
        setSize(400, 150);

        panel = new JPanel();
        label1 = new JLabel("Color Label");
        label1.setForeground(Color.blue);
        label2 = new JLabel("Font Label");
        label2.setFont(new Font("Arial", Font.ITALIC, 30));
        label2.setForeground(Color.ORANGE);
        panel.add(label1);
        panel.add(label2);
        add(panel);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    public static void main(String[] args) {
        new LAbelTest();

    }

}
profile
백엔드 교육과정 기록 velog입니다.

0개의 댓글