Loading...

JAVA / / 2022. 2. 8. 20:43

자바 45강. GUI 이벤트

반응형

핸드폰의 화면,

컴퓨터의 모니터 등

모든 창들을 윈도우라고 한다.

순수한 도화지에는 그림을 잘 그리지 않는다.

틀이 없기 때문이다.

 

틀이 없으면 일일이 하나하나 좌표를 찍어

만들기 때문에 힘들고,

또한 사용자의 UX를 해친다.

 

보통 레이아웃 틀을 만들어서 배치한다.

 

JPanel이 틀을 가진다.

JPanel이 가진 기본 틀은 BorderLayout이다.

 

JPanel 안에 들어올 수 있는 것은 2가지가 있다.

JPanel안에 JPanel이 또 들어올 수 있고,

컴포넌트(component)가 들어올 수 있다.

 

버튼, 라디오 버튼, 체크 박스 등과 같은 것들이 컴포넌트이다.

 

컴포넌트를 담을 수 있는 것들을 컨테이너(container)라고 한다.

 

JPanel은 컴포넌트를 담을 수 있기 때문에 컨테이너이다.

컨테이너로 추상화되어있는 것이다.

 


 

JFrame이 들고있는 JPanel이 아닌

내가 새로운 패널인 MyPanel을 만들면

BorderLayout이 아닌 FlowLayout으로 만들어진다.

 

package site.metacoding.ex13;

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

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

public class EventEx01 extends JFrame {

	// 컴포넌트, 컨테이너들은 전역변수로 만들어줌
	// 생성자는 스택, 지역변수 오래못감

	JPanel myPanel;
	JButton btn1, btn2; // Ctrl + Shift + O import 단축키

	public EventEx01() {
		setSize(300, 300);
		setLocationRelativeTo(null); // 프레임 화면 중앙 배치
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 닫기버튼 클릭시 main 종료

		myPanel = new JPanel(); // heap에 띄우기
		add(myPanel);

		btn1 = new JButton("버튼1");
		myPanel.add(btn1);

		btn2 = new JButton("버튼2");
		myPanel.add(btn2);

		// 윈도우야 지켜봐줘 이 버튼을
		btn1.addActionListener(new ActionListener() { // 익명 클래스

			// 버튼이 클릭되면 윈도우가 해당 메서드를 콜백해준다.
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("버튼1이 클릭되었습니다.");

			}
		});

		btn2.addActionListener((ActionEvent e) -> {
			System.out.println("버튼2가 클릭되었습니다.");
		});

		setVisible(true);
	}

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

}

 

클릭하는지 누가 계속 지켜보고 있어야 한다.

그게 리스너이다.

 

btn1.addActionListener(null);

까지가 리스너를 생성한 것이다.

 

그래서 지켜보고 있는데 어쩌라고?

하고 있는 상태인 것이다.

 

그래서 null자리에

타겟을 넣어줌으로써 이벤트를 발생시킨다.

 

클래스 A로 안두고 Hello 메서드를 때리면

실수로 다른 메서드를 보낼 수도 있으니

Interface를 통해

강제성을 부여해준다.

 

근데 원하는 메서드를 바로 넣을 수 없으니까

클래스를 넣어준다.

 

메서드는 1급 객체가 아니라

주소를 모르기 때문!!

 

익명 클래스를 만들어 줄 것이다.

 

지켜보다가 클릭하면 이 메서드를 실행해줘!

 

버튼을 클릭하면

actionPerformed 메서드를 호출해준다.

 

윈도우가 콜백 하는 것이다!

 

이게 이벤트이다.

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

 

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형