[Java] GUI 프로그래밍
programming/java

[Java] GUI 프로그래밍

17. GUI 프로그래밍

 

17.1 자바의 GUI 프로그래밍 기술

TUI - Text-based User Interface 텍스트 기반의 인터페이스

GUI - Graphical User Interface 그래픽 기반의 인터페이스

 

 

17.1.1 AWT(Abstract Window Toolkit)

GUI 프로그래밍을 위한 도구

GUI 프로그래밍에 필요한 다양한 컴포넌트를 제공

Java와 C로 구현

 

17.1.2 Swing

AWT를 확장한 GUI 프로그래밍 도구

AWT보다 더 많은 종류의 컴포넌트를 제공

순수한 Java로 구현

 

 

17.2 화면 구성 요소

17.2.1 Component와 Container

  • Component: 화면 구성 요소
  • Container: 다른 컴포넌트를 담을 수 있는 컴포넌트(그릇 역할)

 

17.2.2 Container

17.2.2.1 독립적인 Container

Frame

Dialog - 메뉴를 붙일 수 없음, 사이즈가 고정적

 

17.2.2.2 종속적인 Container

Panel

2개 이상의 컴포넌트를 하나로 묶어서 처리할 때 사용

Panel 안에 Panel을 넣을 수 있음(다양한 화면 배치에 활용됨)

ScrollPane - 스크롤바

 

17.2.2.3 Component를 Container에 추가하는 방법

// 대상컨테이너객체.add(추가할 컴포넌트 객체)
frame.add(button);

 

17.2.3 프레임(JFrame)

 
독립적인 윈도우창
프레임 생성
 JFrame f = new JFrame("프레임의 타이틀");
프레임의
 setSize(가로길이, 세로길이)
 pack();    // 필요한만큼 자동으로 사이즈 설정

프레임을 화면에 표시

 setVisible(true)

프레임의 닫기 동작

 현재 창만 닫음

  setDefaultCloseOperation(DISPOSE_ON_CLOSE);

 모든 창을 닫고 프로그램을 완전히 종료시킴

  setDefaultCloseOperation(EXIT_ON_CLOSE);

 화면에서 숨김(종료된 상태가 아님)

  setDefaultCloseOperation(HIDE_ON_CLOSE);

 

17.3 RGB color : 빛의 3원색

011627

#RRGGBB : red, green, blue 색상별로 00~FF(0~255)

#000000 : black    ```모니터 생각하면 된다

#FF0000 : red

#00FF00 : green

#0000FF : blue

색상 설정 코드

 new Color(red, green, blue)

 new Color(Color.red)

 

17.4 메뉴 만들기

011748

```

* pull down menu(풀다운메뉴)

popup menu(context menu)

 

17.5 Layout(화면배치)

 

17.5.1 FlowLayout - 순서대로 배치

  011923

 

17.5.2 BorderLayout - 한 영역에 1개의 컴포넌트만 배치됨

  011950

 

17.5.3 GridLayout

  011950

 

17.5.4 CardLayout

  012027
 
17.5.5 기본 레이아웃
 가) 기본적으로 지정된 Layout
  FlowLayout : Applet, Panel
  BorderLayout : Frame, Dialog
 나) 지정된 기본 Layout을 변경하고 싶을 경우
  setLayout( new 레이아웃클래스() );
  setLayout( new FlowLayout() );
 다) Layout을 사용하지 않고 직접 좌표를 지정할 경우
  setLayout(null);

  Button button = new Button("버튼");

  button.setBounds(0, 0, 50, 25);    // x, y, width, height

  add.(button);

 
17.5.6 BorderLayout
 화면을 5개의 영역으로 나누고, 각 영역에 하나의 컴포넌트만 사용 가능
 영역을 지정하지 않으면 Center 영역에 배치됨
 한 영역에 2개 이상의 컴포넌트를 넣으려면 Panel을 사용
012205
 
17.5.7 FlowLayout
 왼쪽에서 오른쪽으로, 위에서 아래로 순차적으로 배치
012300

 

17.6 이벤트 처리(Event Handling)

 

17.5.1 이벤트 처리 : user와 system 간의 상호작용

 user : request(요청)
 system : response(응답)

 

17.5.2 이벤트 처리의 3요소

 이벤트소스 : 이벤트의 대상
 이벤트 감시자(이벤트 리스너) : 이벤트가 발생했는지 검사

 이벤트 처리기(이벤트 핸들러) : 이벤트가 발생했을 때 처리할 코드

 

012327

 

17.5.3 컴포넌트에 이벤트 처리 기능을 추가하는 코드

 이벤트소스.이벤트리스너(이벤트핸들러)
 button.addActionListener(this);

 

17.5.4 자바에서 미리 구현된 이벤트 처리 클래스에서 제공하는 기능을 사용하기 위해서는 해당되는 인터페이스만 호출하면 됨

 
17.5.5 대표적인 이벤트 처리 클래스
 ActionEvent - 버튼, 메뉴 아이템 등을 클릭할 때
 MouseEvent - 마우스 이벤트
 KeyEvent - 키 이벤트
 
17.5.6 Listner와 Adaptor
 Listener : 이벤트 처리 클래스를 호출하기 위한 인터페이스
 Adaptor : 이벤트 리스너를 아무런 내용없이 구현한 클래스
 
interface KeyListener {
public void keyPressed
}
...
 
...

 

17.7 애플릿(Applet)

 

17.7.1 웹브라우저에서 실행되는 자바 프로그램

17.7.2 애플릿의 테스트를 위해서는 애플릿뷰어 사용

public 

 

<html>

 

17.7.3 Applet의 생명주기(Life Cycle)

1. 웹브라우저가 애플릿에 포함된 HTML문서를 읽는다.

2. 웹브라우저가 애플릿(자바클래스)을 다운로드한다.

3. 웹브라우저가 애플릿의 인스턴스를 생성한다.

4. 애플릿이 초기화된다. - init()

5. 애플릿이 실행된다. - start()

 

17.8 Window Builder

 

17.8.1 위지윅(WYSIWYG, what you see is what you get)

 사용자가 현재 화면에서 보고 있는 내용과 동일한 출력 결과를 얻을 수 있다는 개념

 

17.8.2 이클립스 플러그인 Window Builder 설치

 Help - Install New Software

 http://download.eclipse.org/windowbuilder/WB/integration/4.5/

 Design 탭을 눌러서 컴포넌트 배치 및 이벤트 처리 기능

 

17.8.3 Eclipse Plugin

 

013655 imagesss

 

17.9 실습예제

 

17.9.1 FrameExam.java

17.9.2 PanelExam.java

 ```note.

 * 화면구성요소

  container : 그릇

   Frame

  component : 음식015314

 

 * 상속관계, 포함관계

  상속 : 1개만 가능

  포함 : 여러개 가능

MyColorAction.java???

 

17.9.5 ButtonExam.java

17.9.6 EventExam1.java

17.9.7 EventExam2.java

17.9.8 EventExam3.java

17.9.9 ButtonEventExam.java (윈도우 빌더를 이용)

17.9.10 ClockExam.java

17.9.11 RadioExam.java

17.9.12 CheckboxExam.java

17.9.13 ComboExam.java

17.9.14 ListExam.java

17.9.15 CanvasExam.java

```

* 이벤트 처리의 3요소

 

이벤트소스.이벤트리스너(이벤트핸들러)

 

이벤트소스 : 이벤트의 대상

이벤트리스너 : 이벤트가 일어나는지 감시, 관찰

이벤트핸들러 : 이벤트 처리기(이벤트가 일어날 때의 동작)

 

17.9.16 ProgressExam.java

```

* Multi Thread 작업단위가 2개 이상

Background Thread - setValue() 호출

Main Thread - 화면 변경

17.9.18 LoginExam.java

17.9.19 TextAreaExam.java

```note.

JTextField - single line

JTextArea - multi line

 

17.9.20 TreeExam.java

```

트리구조

root node

17.9.21 TableExam.java

17.9.24 KeyMouseExam.java (일반클래스로 작성)    ``키이벤트안먹힘

```

이벤트소스.이벤트리스너(이벤트핸들러)

17.9.25 CardExam.java

17.9.24 MouseExam.java (일반클래스로 작성)

17.9.25 MessageExam.java

17.9.27 MenuExam.java

17.9.28 PopupExam.java

17.9.29 MdiExam.java

17.9.30 ColorDialogExam.java

17.9.31 TabExam.java