열심히 끝까지

48강 Java GUI Programming2 본문

멘토씨리즈 JAVA

48강 Java GUI Programming2

노유림 2022. 5. 12. 20:10

<복습>
GUI(Graphical User Interface)
       : 컴퓨터를 사용하는 사용자를 위해 만들어진
         특정한 기능을 가진 그래픽 요소

JAVA GUI 프로그래밍
       : 사용자가 프로그램을 쉽게 다룰 수 있도록
         그래픽을 제공하도록 프로그래밍 하는 것

종류 
[1] AWT 자바에서 GUI를 프로그래밍하기 위해 처음으로 제공한 라이브러리
[2] Swing : AWT를 대체하기 위해 자바로 작성된 GUI 객체

- AWT와 Swing의 차이점 : AWT는 운영체제의 자원 활용

컴포넌트(Component)와 컨테이너(Container)
컴포넌트 : JAVA에서 GUI를 구성하는 요소
   ex ) JButton, JCheckBox, JSlider, JTextField, JComboBox, JMenu ..
컨테이너 다른 컴포넌트를 포함할 수 있는 컴포넌트
               : JFrame 과 같이 다른 컴포넌트를 포함할 수 없는 컴포넌트를
                 최상위 컴포넌트라고 한다.

GUI 프로그래밍 순서
1. extends JFrame
JFrame 클래스를 상속받아, 나만의 프레임 클래스 작성
생성자에서 컴포넌트 및 프레임의 디자인 구현하기

2. 기본 설정 - 생성자에서 하기
: title, size, visible 설정하기
- title 설정 : setTitle("타이틀명");
size 설정 : setSize(가로길이, 세로길이);
visible 설정 : setVisible(true);

48-1 ) 자바에서 이벤트 처리
이벤트(Event)란?
       : 프로그램을 실행하는 도중 사용자에 의해 발생하는
         키보드 입력, 마우스 클릭 등의 동작

이벤트 처리란?
       : 이벤트가 발생했을 때, 어떤 작업을 할 것인지 결정하는 것

[1] 이벤트 객체
       : 이벤트 발생 시 이벤트에 대한 정보를 가진 객체
       ex ) 이벤트의 종류, 이벤트가 발생한 위치(ex, 마우스 좌표), 체크박스의 체크 상태

[2] 이벤트 리스너
       : 이벤트 객체에 의해서 호출되어 해당 이벤트를 처리하는 객체
       - 이벤트 리스너 사용 시 해당 인터페이스의 추상 메서드 구현해야함
 
이벤트에 따른 이벤트 리스너의 종류

이벤트 종류       리스너 인터페이스       추상메서드                                          발생상황
Action               ActionListener           void actionPerformed(ActionEvent)         Action이 발생 시

                                                      void KeyPressed(KeyEvent)                    키가 눌려질 때
Key                   KeyListener              void KeyReleased(KeyEvent)                  눌러진 키를 땔 때
                                                      void keyTyped(KeyEvent)                      유니코드 키 입력 시

                                                      void MousePressed(MouseEvent)          마우스버튼이 눌릴 때
                                                      void MouseReleased(MouseEvent)         눌린 마우스 뗄 때
Mouse               MouseLisener           void MouseClicked(MouseEvent)           클릭 시
                                                      void MouseEntered(MouseEvent)          마우스 포인터가 컴포넌트
                                                                                                           위에 올라올 때
                                                      void MouseExisted(MouseEvent)           마우스 포인터가 컴포넌트를
                                                                                                           벗어날 때


<실습>
앞에서 다루었던 예제에 이벤트 요소 넣은 코드

1) 이벤트리스너에서 이벤트 발생 시 할 작업 오버라이딩


2) Frame 작성


3) 만든 Frame 생성자 호출


<실행 결과>
-이벤트 발생 전


-이벤트 발생 후



이벤트 리스너 클래스의 구조
ActionEvent e 
- 이벤트 발생 시 e 객체에 이벤트 정보가 전달

JButton button = (JButton)e.getSource();
- getSource()의 리턴타입이 Object여서 강제형변환
- e.getSource() : 현재 이벤트가 발생된 컴포넌트

button.setText("버튼 클릭");
- button.setText("문자열"); : 현재 버튼의 문자열 재지정


[3] 마우스 관련 이벤트

이벤트 종류       리스너 인터페이스         추상메서드                                   발생상황
Mouse             MouseMotionListener   void mouseDragged(MouseEvent e)   마우스가 드래그 될 때
                                                       void mouseMoved(MouseEvent e)     마우스가 움직일 때

마우스 이벤트 발생 시 얻을 수 있는 정보


메서드                                   메서드 활용
int getX()                              현재 마우스 포인터의 X좌표
int getY()                              현재 마우스 포인터의 Y좌표
short getButton()                   현재 클릭한 버튼(왼쪽, 오른쪽) 
int getClickCount()                 마우스를 클릭한 횟수

<실습>
간단한 마우스 이벤트 처리
- 프로그래밍 및 마우스가 올라가서 빨간색으로 처리


- 마우스 나가서 노란색 처리


- 마우스 올라간 상태에서 클릭했을 때 처리



Mouse클래스의 내부 클래스로 작성
-> 멤버 변수 접근을 위해



[Menu 만들기]
메뉴바 예시?


1) JMenuBar 객체 생성
       JMenuBar mb = new JMenuBar();
2) JMenu 생성
       JMenu screenMenu = new JMenu("메뉴바1");
3) JMenuItem 생성
4) JMenu에 JMenuItem 추가
       screenMenu.add(new JMenuItem("Load"));
5) JMenuBar에 JMenu 추가
       mb.add(screenMenu);
6) 현재 프레임의 메뉴바를 생성한 JMenuBar객체로 지정
       setMenuBar(mb);



<실습>
메뉴바 내에 작업창 만들고 띄우기


또다른 실습코드방법

'멘토씨리즈 JAVA' 카테고리의 다른 글

47강 Java GUI Programming  (0) 2022.05.12
46강 입출력 / 자바의 IO 패키지  (0) 2022.05.11
45강 입출력 / 자바의 IO 패키지  (0) 2022.05.11
44강 스레드3  (0) 2022.05.10
43강 스레드2  (0) 2022.05.10