java.awt 패키지의 단순 컴포넌트와 이벤트 처리

Slides:



Advertisements
Similar presentations
Chap02 자바환경과 자바 프로그램 Section 1 : 자바 개발 환경 Section 2 : 자바 통합 환경 Section 3 : 자바 응용 프로그램과 애플릿 프로그램 Section 4 : 자바 응용 프로그램 Section 5 : 자바 애플릿 프로그램.
Advertisements

자바 5.0 프로그래밍.
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
명품 JAVA Essential.
14. 위피 게임: 가위바위보 게임 초기에 점수=0 처음 이기면 10 점 그 다음부터 이기면 점수=현재 점수*2 지면
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
- 계산기 GUI 구성하기 - 조원: 박강국 오정은 이귀식 김도윤 안영진.
Ch.22 Command Pattern 장 덕 성 계명대학교 컴퓨터공학과 정보공학실험실
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
9장. 스윙 프로그래밍.
10장. 이벤트 처리와 그래픽 프로그래밍.
Java AWT Computer Programming Distributed Computing System Laboratory
GUI 이벤트, 이벤트 리스너와 이벤트 소스 그림 그리기 내부 클래스
제7장 이벤트 프로그래밍.
7장 배열 ③.
레이아웃 관리자 스윙 구성요소 비트박스 프로그램
명품 JAVA Programming 제 13 장 스레드와 멀티태스킹.
컴퓨터 프로그래밍 실습 #7 제 4 장 GUI 클래스 작성.
명품 JAVA Essential.
J2ME(Java 2 Micro Edition) 무선 장치용 UI의 핵심 컴포넌트
명품 JAVA Programming.
Lab 3 Guide: 교재 4장 대화상자 예제. - 프로파일 입력 ( 쪽)
Chap14 스윙(SWING) 14.1 스윙 컴포넌트 14.2 컴포넌트의 이벤트 처리
제 4 장 클래스 작성 Lab 4- 2.
DB와 WEB 연동(1) [2-Tier] Java Applet 이용
9장 AWT(1).
Lesson 12. 사용자 인터페이스(AWT) - 1
Lesson 11. 이벤트.
4장 컴포넌트 (I) org.kwis.msp.lwc.
2. 자바 애플릿.
10장 객체-지향 프로그래밍 II ©창병모.
Power Java 제19장 배치 관리자(Layout Manager).
명품 JAVA Programming 제 12 장 그래픽.
Choi Younghwan CSE HUFS
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
Chapter 12. Awt와 Swing Chapter 13. 배치 관리자 Chapter 14. 이벤트 관리자
Java로 배우는 디자인패턴 입문 Chapter 22. Command 명령을 클래스로 만든다
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
Swing 컴포넌트 텍스트 컴포넌트 텍스트 필드 텍스트 영역 스크롤 페인 체크 박스 라디오 버튼.
이벤트 프로그래밍 안혜선.
목 차 1. swing component 특징 및 관련 packages
Java Seminar Chapter 4.
5장 조건과 반복 ③.
명품 Java Programming.
프로그래머를 위한 Java 2 제4장 AWT 프로그래밍
명품 JAVA Essential.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
메모장 구동.
9장 AWT(1).
GUI 프로그래밍과 AWT 컴퓨터 공학실험(I) 인공지능 연구실.
이벤트(Event) 처리하기 윈도우 프로그램에서는 이벤트를 통하여 실행 중인 프로그램에게 사용자의 요구사항을 알린다.
명품 JAVA Programming 제 15 장 애플릿과 멀티미디어.
주소록 프로그램.
4장 Random Number 프로그래밍 언어 실험실 석사 3학기 박중기
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
JAVA WINDOW PROGRAMMING
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
제8장 쓰레드 프로그래밍.
제 4 장 클래스 작성 Lab 4- 2.
Outline 클래스의 해부 캡슐화(Encapsulation) 메쏘드의 해부 그래픽 객체(Graphical Objects)
GUI 프로그래밍과 AWT 컴퓨터 공학실험(I) 인공지능 연구실.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
C# 10장. 참조형.
11장 다형성과 추상 클래스, 인터페이스 Section 1 객체의 형 변환 Section 2 연산자 Section 3 다형성
Power Java 제16장 이벤트 처리.
Chapter2 : 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합개발환경(IDE)
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

java.awt 패키지의 단순 컴포넌트와 이벤트 처리 학습목표 자바에서의 패키지 및 java.awt 패키지 중 단순 컴포넌트에 대해 학습한다. java.awt 패키지 중 단순 컴포넌트에서의 이벤트 처리에 대해 학습한다.

패키지의 정의와 종류 Section 01 개요(1/2) 패키지는 서로 관련된 클래스와 인터페이스의 집합을 의미하며 하나의 그룹으로 모아 사용한다. 패키지는 자바에서 제공되는 패키지와 사용자들이 정의해 사용하는 패키지로 구분한다. 자바에서는 다음과 같은 다양한 패키지를 제공한다. java.awt : 그래픽 사용자 인터페이스(GUI, Graphic User Interface)를 위한 클래스를 제공하는 패키지다. java.applet : 웹에서 수행되는 프로그램을 위한 클래스를 제공하는 패키지다. java.io : 파일, 키보드 등 입출력 기능을 위한 클래스를 제공하는 패키지다. java.lang : 기본적인 기능을 위한 클래스를 제공하는 패키지다. java.util : 유용한 유틸리티 기능을 위한  클래스를 제공하는 패키지다. java.net : 통신 기능 등을 위한 클래스를 제공하는 패키지다. java.sql : 데이터베이스 기능 등을 위한 클래스를 제공하는 패키지다. 프로그램에서 패키지에 있는 클래스를 사용하려면 먼저 import 문을 선언해야 한다. 단,  java.lang 패키지인 경우에는 import 문을 생략하여 사용할 수 있다. 

java.awt 패키지 이벤트 발생과 이벤트 처리 Section 01 개요(2/2) 객체의 이벤트는 사용자가 해당 객체에 특정 조작을 하면 컴퓨터로부터 발생되는 일종의 신호다. 예를 들면, 버튼을 마우스 왼쪽 버튼으로 누르는 행위, 텍스트필드 등에 키보드를 이용해 입력한 행위, 마우스 커서를 옮기는 행위, 윈도우의 크기를 조절하는 행위 등이다. 그리고 이런 행위에 의해 발생한 이벤트를 처리하기 위해 필요한 자바의 메소드나 함수를 이벤트 처리기(Event Handler)라 한다 이벤트 발생과 이벤트 처리 객체의 이벤트는 사용자가 해당 객체에 특정 조작을 하면 컴퓨터로부터 발생되는 일종의 신호다. 예를 들면, 버튼을 마우스 왼쪽 버튼으로 누르는 행위, 텍스트필드 등에 키보드를 이용해 입력한 행위, 마우스 커서를 옮기는 행위, 윈도우의 크기를 조절하는 행위 등이다. 그리고 이런 행위에 의해 발생한 이벤트를 처리하기 위해 필요한 자바의 메소드나 함수를 이벤트 처리기(Event Handler)라 한다.

단순 컴포넌트 Section 02 단순 컴포넌트 (1/5) 단순 컴포넌트란 버튼, 레이블, 텍스트필드, 텍스트 영역, 체크박스, 라디오 버튼, 리스트 메뉴, 선택 메뉴, 스크롤바, 메뉴, 이미지 캔버스 등의 요소를 갖고 있는 사용자 인터페이스다.  단순 컴포넌트 중에서 체크박스, 라디오 버튼, 리스트 메뉴, 선택 메뉴, 스크롤바, 메뉴, 이미지 캔버스 등의 사용 예는 다음과 같다. 체크 상자 라디오 버튼 프레임 또는 윈도우 컨테이너 리스트 메뉴 선택 메뉴 이미지 캔버스 스크롤 바

버튼(Button) 클래스 레이블(Label) 클래스 텍스트필드(TextField) 클래스 텍스트영역(TextArea) 클래스 Section 02 단순 컴포넌트 (2/5) 버튼(Button) 클래스 버튼(Button) 클래스는 버튼을 만들기 위해 사용한다. 레이블(Label) 클래스 레이블(Label) 클래스는 레이블을 만들기 위해 사용한다. 레이블(Label) 클래스는 화면에 문자 등을 출력할 수 있고 이벤트를 적용할 수 없다. 텍스트필드(TextField) 클래스 텍스트필드(TextField) 클래스는 한줄 내에서 문자열을 입력 또는 편집하거나 보여줄 때 사용한다. 텍스트영역(TextArea) 클래스 텍스트영역(TextArea) 클래스는 여러 줄 내에서 문자열을 입력 또는 편집, 보여줄 때 사용한다.

[실습하기 7-1] AWT의 버튼(Button), 레이블(Label), 텍스트필드              (TextField) 및 텍스트영역(TextArea) 클래스를 사용 (1/9)

[실습하기 7-1] AWT의 버튼(Button), 레이블(Label), 텍스트필드              (TextField) 및 텍스트영역(TextArea) 클래스를 사용 (2/9) 01  import java.awt.*; 02  03  public class Jv_7_1 { 04  05        private Frame f; 06        private Label lb, lb0, lb1, lb2, lb3, lb4, lb5; 07        private Label lb6, lb7; 08        private Button bt0, bt1, bt2, bt3, bt4, bt5; 09        private TextField t; 10        private TextArea ta1, ta2; 11  12        int m=0, n=0;    13        int i=0, j=0;    14  15        public Jv_7_1() { 16             f = new Frame("AWT(Abstract Window Toolkit)에                      온 것을 환영합니다!"); 17  18          lb = new Label("당신이 좋아하는 지명을 선택하세요?"); 19  20          lb1 = new Label("천안 버튼:"); 21          bt1 = new Button("천안"); 22  Jv_7_1.java

[실습하기 7-1] AWT의 버튼(Button), 레이블(Label), 텍스트필드              (TextField) 및 텍스트영역(TextArea) 클래스를 사용 (3/9) 23          lb2 = new Label("당진 버튼:", Label.LEFT); 24          lb2.setBackground(Color.red); 25          bt2 = new Button("당진"); 26          bt2.setBackground(Color.red); 27       28          lb3 = new Label("속초 버튼:", Label.CENTER); 29          lb3.setBackground(Color.green); 30          bt3 = new Button("속초"); 31          bt3.setBackground(Color.green); 32      33          lb4 = new Label("서울 버튼:", Label.RIGHT); 34          lb4.setBackground(Color.blue); 35          bt4 = new Button("서울"); 36          bt4.setBackground(Color.blue); 37      38          lb5 = new Label("제주 버튼:"); 39          lb5.setBackground(Color.yellow); 40          bt5 = new Button("제주"); 41          bt5.setBackground(Color.yellow); 42      43          t = new TextField(30); 44          t.setText("천안 / 당진 / 속초 / 서울 / 제주"); Jv_7_1.java

[실습하기 7-1] AWT의 버튼(Button), 레이블(Label), 텍스트필드              (TextField) 및 텍스트영역(TextArea) 클래스를 사용 (4/9) 45        t.setBackground(Color.green); 46  47         ta1 = new TextArea("천안\n속초", 3, 20); 48        ta2 = new TextArea("천안\n속초\n서울 \n제주", 5, 20); 49        m = ta1.getRows(); n = ta1.getColumns(); 50        lb6 = new Label("1st텍스트영역(줄:" + m + " 열:" + n +")"); 51        lb6.setBackground(Color.green);  52        i = ta2.getRows(); j = ta2.getColumns(); 53        lb7 = new Label("2nd텍스트영역(줄:" + i + " 열:" + j +")"); 54        lb7.setBackground(Color.yellow);  55      } 56  57       public void startFrame() { 58      f.setLayout(new FlowLayout()); 59  60         f.add(lb); 61  62         f.add(lb1); 63        f.add(bt1); 64  65         f.add(lb2); 66        f.add(bt2); Jv_7_1.java

[실습하기 7-1] AWT의 버튼(Button), 레이블(Label), 텍스트필드              (TextField) 및 텍스트영역(TextArea) 클래스를 사용 (5/9) 67  68          f.add(lb3); 69          f.add(bt3); 70  71          f.add(lb4); 72          f.add(bt4); 73  74          f.add(lb5); 75          f.add(bt5); 76  77          f.add(t); 78  79          f.add(lb6); 80          f.add(ta1); 81          f.add(lb7); 82          f.add(ta2); 83   84          f.setSize(500,300); 85          f.setVisible(true); 86        } 87  Jv_7_1.java

[실습하기 7-1] AWT의 버튼(Button), 레이블(Label), 텍스트필드              (TextField) 및 텍스트영역(TextArea) 클래스를 사용 (6/9) 88     public static void main(String[] args) { 89        Jv_7_1 kkk = new Jv_7_1(); 90        kkk.startFrame();              91     } 92  } Jv_7_1.java

[실습하기 7-1] AWT의 버튼(Button), 레이블(Label), 텍스트필드              (TextField) 및 텍스트영역(TextArea) 클래스를 사용 (7/9) 01행: AWT(Abstract Window Toolkit)와 연관된 클래스를 사용하기 위해 java.awt 패키지를 포함시키기 위해 import한다. 03~92행: 클래스 Jv_7_1를 선언한다. 05행: Frame 클래스의 객체 변수를 선언한다. 06~07행: 레이블 객체를 선언한다. 08행: 버튼 객체를 선언한다. 09행: 텍스트필드 객체를 선언한다. 10행: 텍스트 영역 객체를 선언한다. 15~55행: Jv_7_1() 클래스의 생성자를 선언한다. 16행: Jv_7_1() 클래스의 생성자 안에 Frame 클래스의 객체를 생성하며 기본윈도우가 만들어진다. 이 윈도우는 경계선과 타이틀 바를 갖고 있는 윈도우다. 18, 20, 23, 28, 33, 38, 50, 53행: 생성자 내에서 문자열을 가진 레이블을 생성한다. 예를 들면, Label lb1 = new Label("컴퓨터학");에 의해서 "컴퓨터학"이란 문자열을 가진 레이블 1개를 생성한다.  - Label.LEFT: 왼쪽으로 정렬된 문자열을 포함한 레이블을 생성한다.  - Label.RIGHT: 오른쪽으로 정렬된 문자열을 포함한 레이블을 생성한다. - Label.CENTER: 가운데로 정렬된 문자열을 포함한 레이블을 생성한다.  프로그램 구조 설명

[실습하기 7-1] AWT의 버튼(Button), 레이블(Label), 텍스트필드              (TextField) 및 텍스트영역(TextArea) 클래스를 사용 (8/9) 24, 29, 34, 39, 51, 54행: 레이블의 배경색을 지정하는 메소드다. 예를 들면,  lb2.setBackground(Color.red);에서는 lb2에 의해 생성된 레이블의 배경색을 지정하는 setBackground() 메소드이며, 여기서는 붉은색을 지정하고 있다. 21, 25, 30, 35, 40행: 생성자 내에서 문자열이 있는 버튼을 생성한다. 26, 31, 36, 41행: 버튼의 배경색을 지정하는 메소드다. 43행: 30이라고 지정한 문자 수 만큼 들어갈 수 있는 비어 있는 텍스트필드를 생성한다. 44행: 텍스트필드에 “천안 / 당진 / 속초 / 서울 / 제주” 문자열로 지정한다. 45행: 텍스트필드의 배경색을 지정하는 메소드다. 47행: TextArea 클래스로부터 새로운 텍스트 영역 컴포넌트를 생성한다. 숫자 3, 20은 각각 3행 20열을 의미하며, \n은 줄바꾸기(return)을 의미한다. 48행: TextArea 클래스로부터 새로운 텍스트 영역 컴포넌트를 생성한다. 숫자 5, 20은 각각 5행 20열을 의미하며, \n은 줄바꾸기(return)을 의미한다. 49행: m = ta1.getRows();은 ta1으로 생성된 텍스트 영역에서 텍스트 영역의 줄 수를 반환하여 m에 저장한다. n = ta1.getColumns();은 ta1으로 생성된 텍스트 영역에서 텍스트 영역의 열 수를 반환하여 n에 저장한다. 프로그램 구조 설명

[실습하기 7-1] AWT의 버튼(Button), 레이블(Label), 텍스트필드              (TextField) 및 텍스트영역(TextArea) 클래스를 사용 (9/9) 57~86행: 객체 생성자 내에 있는 메소드다. 58행: 레이아웃을 설정하는 데 사용하고, new FlowLayout()에 의해 수평 방향으로 배치한다. 프레임 내에서의 컴포넌트의 배치 방식은 FlowLayout이라는 의미이다. 즉, 왼쪽에서 오른쪽으로 배치하고 한줄이 넘치면 다음 줄로 넘어가서 새줄로 시작하여 차례대로 배치하는 방식이다. <<다음 장>>에서 자세히 서술한다.  60, 62, 65, 68, 71, 74, 79, 81행: add() 메소드를 사용해 레이블 객체를 프레임에 추가한다.  63, 66, 69, 72, 75행: 버튼 객체를 add() 메소드를 사용해 프레임에 추가한다. 77행: 텍스트필드 객체를 add() 메소드를 사용해 프레임에 추가한다. 80, 82행: 텍스트 영역 객체를 add() 메소드를 사용해 프레임에 추가한다. 84행: 프레임의 크기를 가로 500픽셀, 세로 300픽셀로 setSize() 메소드를 사용해 지정한다.  85행: setVisible() 메소드에 true 값을 설정하면 프레임 화면을 보이게 한다. 만일 false 값을 설정하면 프레임 화면이 보이지 않게 된다. 88, 91행: main() 메소드의 선언부이다. 89행: Jv_7_1 객체를 생성한다. 90행: Jv_7_1 객체를 생성한 후에 startFrame(); 메소드를 호출하여 화면에 윈도우를 출력시킨다. 프로그램 구조 설명

체크박스(Check Box) 클래스 Section 02 단순 컴포넌트 (3/5) 체크박스(Check Box) 클래스의 종류에는 2가지 종류의 형태가 있다. 정사각형에 체크 표시가 나타나는 체크박스(Check Box)와 원안에 점이 나타나는 라디오 버튼(Radio Button)이다. 체크박스(Check Box) : 체크박스에 마우스로 한번 클릭하면 정사각형에 ‘√’ 표시(상태는 참인 on)가 되고, 또 다시 클릭하면 정사각형에 ‘√’ 표시(상태가 거짓인 off)가 없어진다. 즉, 클릭할 때마다 참/거짓 상태가 번갈아 바뀌는 토글(toggle)이 된다. 동시에 여러 개의 항목을 선택할 수 있다. 라디오 버튼(Radio Button) : 라디오 버튼에 마우스로 한번 클릭하면 원 안에 ‘◉ 표시(상태는 참인 on)가 되고, 또 다시 클릭하면 원 안에 ‘●’ 표시(상태가 거짓인 off)가 없어진다. 즉, 클릭할 때마다 참/거짓 상태가 번갈아 바뀌는 토글(toggle)이 된다. 동시에 여러 개의 항목을 선택할 수 있고 반드시 한 개의 항목만을 선택할 수 있다. 라디오 버튼을 사용하려면 여러 개의 라디오 버튼을 한 개의 그룹으로 묶어서 그 중 하나를 선택해야 한다. 그룹을 만들기 위해 CheckboxGroup 클래스를 사용한다

리스트(List) 클래스 초이스(Choice) 클래스 스크롤바(ScrollBar) 클래스 Section 02 단순 컴포넌트 (4/5) 리스트(List) 클래스 다수의 선택 항목이 리스트에 표시되며, 사용자가 이를 선택할 때 사용한다. 선택 항목이 많을 때는 수직 스크롤바가 표시된다.  원하는 선택 항목을 한개 또는 동시에 여러 개 선택 가능하다. 초이스(Choice) 클래스 초이스(Choice) 클래스는 리스트 컴포넌트와 비슷하지만, 차이점은 리스트에 한 개의 선택 항목만이 표시되며, 항목 옆의 단추를 클릭하면 드롭 다운(drop-down) 리스트를 제공한다. 제한된 공간에서 많은 선택 항목을 나타낼 때 유용하다 스크롤바(ScrollBar) 클래스 스크롤바(ScrollBar) 클래스는 스크롤바를 만들기 위해 사용한다. 스크롤바에는 수직 스크롤바와 수평 스크롤바를 만들 수 있으며, 디폴트(default)로는 수직 스크롤바를 지원한다

이미지 캔버스(Image Canvas) 클래스 Section 02 단순 컴포넌트 (5/5) 이미지 캔버스(Image Canvas) 클래스 이미지 캔버스(Image Canvas) 클래스는 특정한 모양은 없으나 이미지 파일을 읽어 보여주거나 선, 원, 그래픽 요소를 그릴 수 있는 그래픽 작업 영역을 제공한다.

[실습하기 7-2] AWT의 체크박스와 라디오 버튼, 리스트와 초이스, 수직 및 수평 스크롤바, 이미지 캔버스를 사용 (1/8)

[실습하기 7-2] AWT의 체크박스와 라디오 버튼, 리스트와 초이스, 수직 및 수평 스크롤바, 이미지 캔버스를 사용 (2/8) 01  import java.awt.*; 02  public class Jv_7_2 extends Frame { 03     CheckboxGroup cbg; 04     Label label1, label2, label3; 05     Scrollbar vSlider, hSlider; 06     Canvas imgCanvas; 07  08     public Jv_7_2() { 09        super("단순 컴포넌트 - 체크박스와 라디오버튼 /리스트와 초이스                  /수직 및 수평 스크롤바 / 이미지 캔버스"); 10        setLayout(new FlowLayout()); 11  12        add(new Checkbox("천안")); 13        add(new Checkbox("당진")); 14        add(new Checkbox("속초")); 15        add(new Checkbox("서울")); 16        add(new Checkbox("제주")); 17        cbg = new CheckboxGroup(); 18        add(new Checkbox("천안", cbg, false)); 19        add(new Checkbox("당진", cbg, false)); 20        add(new Checkbox("속초", cbg, true)); 21        add(new Checkbox("서울", cbg, false)); 22        add(new Checkbox("제주", cbg, false)); Jv_7_2.java

[실습하기 7-2] AWT의 체크박스와 라디오 버튼, 리스트와 초이스, 수직 및 수평 스크롤바, 이미지 캔버스를 사용 (3/8) 23  24        List list = new List(3, false);   25        list.add("천안"); 26        list.add("당진"); 27        list.add("속초"); 28        list.add("서울"); 29        list.add("제주"); 30        add(list); 31        Choice choice = new Choice(); 32        choice.add("천안"); 33        choice.add("당진"); 34        choice.add("속초"); 35        choice.add("서울"); 36        choice.add("제주"); 37        add(choice); 38  39        label1 = new Label("수직 스크롤바: ", Label.CENTER); 40        label2 = new Label("수평 스크롤바: ", Label.CENTER); 41  42        vSlider = new Scrollbar(Scrollbar.VERTICAL, 0,1,0,100); 43        hSlider = new Scrollbar(Scrollbar.HORIZONTAL, 0,4,0,50); 44  Jv_7_2.java

[실습하기 7-2] AWT의 체크박스와 라디오 버튼, 리스트와 초이스, 수직 및 수평 스크롤바, 이미지 캔버스를 사용 (4/8) 45        add(label1); 46        add(vSlider); 47        add(label2); 48        add(hSlider); 49  50        label3 = new Label("이미지 캔버스: ", Label.CENTER); 51        imgCanvas = new Canvas(); 52        imgCanvas.setBackground(Color.yellow); 53        imgCanvas.setSize(200,150); 54        add(label3); 55        add(imgCanvas); 56  57        setSize(600, 300); 58        setVisible(true); 59     } 60  61     public static void main(String[] args) { 62        Jv_7_2 c1 = new Jv_7_2();             63     } 64  }   Jv_7_2.java

[실습하기 7-2] AWT의 체크박스와 라디오 버튼, 리스트와 초이스, 수직 및 수평 스크롤바, 이미지 캔버스를 사용 (5/8) 01행: AWT(Abstract Window Toolkit)와 연관된 클래스를 사용하기 위해 java.awt 패키지를 포함시키기 위해 import한다. 02~64행: 클래스 Jv_7_2를 선언한다. extends Frame를 사용해 Frame 클래스로부터 상속받는 클래스다. 03행: 라디오버튼을 만들기 위해 체크박스 그룹 객체를 선언한다. 04행: 레이블 객체를 선언한다. 05행: 스크롤바 객체를 선언한다. 06행:  이미지 캔버스 겍체를 선언한다. 08~59행: Jv_7_2() 클래스의 생성자를 선언한다. 09행: super() 메소드, 즉 Frame 클래스의 생성자를 통해 "단순 컴포넌트 - 체크박스와 라디오버튼 /리스트와 초이스/수직 및 수평 스크롤바 / 이미지 캔버스"이라는 제목을 갖는 Frame을 생성한다. 10행: setLayout은 레이아웃을 설정하는 데 사용하고, new FlowLayout()에 의해 수평 방향으로 배치한다. 프레임 내에서의 컴포넌트의 배치 방식은 FlowLayout이라는 의미이다. 즉, 왼쪽에서 오른쪽으로 배치하고 한 줄이 넘치면 다음 줄로 넘어가서 새 줄로 시작하여 차례대로 배치하는 방식이다 프로그램 구조 설명

[실습하기 7-2] AWT의 체크박스와 라디오 버튼, 리스트와 초이스, 수직 및 수평 스크롤바, 이미지 캔버스를 사용 (6/8) 12~16행: Checkbox 객체를 선언하며, add() 메소드를 이용해 컨테이너에 추가시킨다. 17행: 라디오버튼을 만들기 위해 체크박스 그룹 객체를 생성한다. 18~22행: 라디오버튼을 만들기 위해 체크박스를 cbg에 그룹화하여 생성한다. 예를 들면, add(new Checkbox("천안", cbg, false));에서 체크박스에 "천안"이라는 이름을 부여하면서 초기 선택값으로 false를 주어 미리 선택이 되지 않도록 한다. add(new Checkbox("속초", cbg, true));에서 체크박스에 "속초"이라는 이름을 부여하면서 초기 선택값으로 true를 주어 미리 선택이 되도록 한다. 24행: 리스트에 있는 항목이 3줄씩 보이게 하며, false에 의해서 여러 개의 항목을 동시에 선택 불가능하게 한다. 만일 true이면 여러 개의 항목을 동시에 선택 가능하게 한다.  25~29행: 주어진 이름의 항목을 해당 리스트에 추가한다. 30행: 생성된 리스트 객체를 add() 메소드를 이용해 컨테이너에 추가시킨다. 31행: 선택(Choice) 객체를 선언한 후에 객체를 생성한다. 프로그램 구조 설명

[실습하기 7-2] AWT의 체크박스와 라디오 버튼, 리스트와 초이스, 수직 및 수평 스크롤바, 이미지 캔버스를 사용 (7/8) 32~36행: 주어진 이름의 항목을 해당 선택(Choice) 컴포넌트에 추가한다. 37행: 생성된 선택(Choice) 객체를 add() 메소드를 이용해 컨테이너에 추가시킨다. 39~40행: 생성자 내에서 문자열을 가진 레이블을 생성한다. 예를 들면, Label lb1 = new Label("컴퓨터학");에 의해서 "컴퓨터학"이란 문자열을 가진 레이블 1개를 생성한다.  42행: 최소값 0, 최대값 100, 초기값이 0, 스크롤바의 두께가 1 픽셀인 수직 스크롤바를 생성한다. 43행: 최소값 0, 최대값 50, 초기값이 0, 스크롤바의 두께가 4 픽셀인 수평 스크롤바를 생성한다. 45, 47행: add() 메소드를 사용해 레이블 객체를 프레임에 추가한다.  46, 48행: add() 메소드를 사용해 스크롤바 객체를 프레임에 추가한다. 50행: 생성자 내에서 이미지 캔버스: "라는 가운데로 정렬된 문자열을 가진 레이블을 생성한다. 프로그램 구조 설명

[실습하기 7-2] AWT의 체크박스와 라디오 버튼, 리스트와 초이스, 수직 및 수평 스크롤바, 이미지 캔버스를 사용 (8/8) 52행: 이미지 캔버스의 배경색을 노란색으로 지정한다. 53행: 이미지 캔버스의 크기를 가로 200 픽셀, 세로 150 픽셀로 지정한다. 54행: 생성된 레이블 객체를 add() 메소드를 이용해 컨테이너에 추가시킨다. 55행: 생성된 이미지 캔버스 객체를 add() 메소드를 이용해 컨테이너에 추가시킨다. 57행: 프레임의 크기를 가로 600픽셀, 세로 300픽셀로 setSize() 메소드를 사용해 지정한다.  58행: setVisible() 메소드에 true 값을 설정하면 프레임 화면을 보이게 한다. 만일 false 값을 설정하면 프레임 화면이 보이지 않게 된다. 51행: 이미지 캔버스 컴포넌트를 생성한다. 61, 63행: main() 메소드의 선언부다. 62행: Jv_7_2 객체를 생성한다.  프로그램 구조 설명

이벤트와 이벤트 처리기의 개념 이벤트 처리 과정과 위임형 이벤트 모델 Section 03 이벤트 처리 (1/8) 이벤트(Event)란 프로그램에서 사용자로부터 프로그램에게 어떠한 일이 발생했다는 것을 알리는 통신 수단이다. 즉, 객체의 이벤트란 사용자가 외부 세계로부터 해당 객체에 특정 조작을 하면 컴퓨터로부터 발생되는 일종의 신호를 말한다. 예를 들면, 버튼 위에서 마우스 커서를 위치한 상태에서 마우스의 왼쪽 버튼을 누른 행위, 사용자가 텍스트필드 등에서 키보드로 입력한 행위, 마우스 커서를 이동시키는 행위, 윈도우의 크기를 변화시키는 행위 등이다. 그리고 이 때 발생한 이벤트를 처리하기 위해 필요한 자바 메소드나 함수를 이벤트 처리기(Event Handler)라 한다 이벤트 처리 과정과 위임형 이벤트 모델 이벤트가 발생하면 해당 이벤트 처리기에서 선언된 자바 언어의 메소드가 호출되어 처리한다.

이벤트 처리 과정과 위임형 이벤트 모델 Section 03 이벤트 처리 (2/8) 예를 들면, 왼쪽 그림처럼 윈도우 메시지 창에 포함된 버튼 컴포넌트를 클릭해 이벤트를 발생시키면, 마우스 클릭 이벤트가 처리되어 오른쪽 그림처럼 파일 대화상자가 열린다. 즉, 하나의 이벤트는 이벤트를 발생시키는 버튼이라는 소스 객체로부터 이벤트를 기다리는 리스너 객체로 전달된다. 버튼이라는 소스 객체에서 이벤트가 발생하면 리스너 객체의 지정된 메소드를 호출한다. 이 때 발생된 이벤트의 유형을 정의하는 클래스의 인스턴스가 매개변수로 넘겨지는데 이러한 이벤트 처리 모델을 위임형 이벤트 모델(Delegation Event Model)이라 한다.

이벤트 처리 프로그램 과정의 예 이벤트의 종류 Section 03 이벤트 처리 (3/8) 이벤트 관련 패키지를 import한다. 발생한 이벤트가 처리되기 위해 인터페이스를 통해 클래스를 생성한다. 버튼 객체처럼 컴포넌트 객체를 생성한 후에 해당 객체에 이벤트를 접수 할 수 있도록 해당 리스너를 등록한다. 리스너 인터페이스의 메소드 들을 구현한다 이벤트의 종류 이벤트는 크게 의미적 이벤트(Semantic Event)와 저수준 이벤트(Low Level Event)로 분류한다. 의미적 이벤트는 특정 컴포넌트에 의해 만들어지는 고수준 이벤트다. 저수준 이벤트는 마우스 누름, 키 누름, 마우스 이동 포커스 변화 등 사용자 입력이나 시스템 수준에서 발생하고 처리 방법은 비슷하다.

이벤트의 종류 Section 03 이벤트 처리 (4/8) 분류 이벤트 명 이벤트 발생하는 경우 소스 객체 의미적 이벤트  소스 객체 의미적 이벤트 ActionEvent 단순 컴포넌트에서의 특유한 동작에 의해 발생 예) - 버튼: 마우스의 클릭한 경우    - 텍스트필드: 엔터 키를 입력한 경이       우     - 리스트: 아이템 선택을 한 경우     - 메뉴아이템: 메뉴를 마우스로 클 릭하거나 키보드로 엔터키 를 눌렀을 경우 Button, Textfield, List, Menuitem TextEvent 텍스트필드나 텍스트 영역의 텍스트를 변경하는 경우 Textfield,   Textarea ItemEvent 체크박스, 라디오 버튼, 리스트, 초이스처럼 선택 항목을 갖는 컴포넌트에서 어떤 항목을 선택한 경우 Checkbox, List, Choice AdjustmentEvent 수직 또는 수평 스크롤바의 값이 변경된 경우 Scrollbar 저수준 MouseEvent 마우스 버튼이 클릭된 경우, 또는 마우스가 객체의 영역으로 들어오거나 나갈 경우 Component MouseMotionEvent 마우스가 움직일 경우 KeyEvent 사용자가 키를 눌렀을 때 키보드 포커스를 가지고 있는 객체인 경우 WindowEvent 윈도우의 열림, 닫힘, 아이콘화처럼 윈도우의 변화가 있을 경우 Frame,  Dialog FocusEvent 키보드 입력을 받을 수 있는 상태가 되었을 경우, 또는 그 반대의 경우 ComponentEvent 컴포넌트의 크기나 위치가 변하는 경우 ContainerEvent  컨테이너 객체에 컴포넌트가 추가 또는 삭제되는 경우 Container

각 이벤트 종류별 리스너, add 메소드, 이벤트 처리기 메소드 Section 03 이벤트 처리 (5/8) 각 이벤트 종류별 리스너, add 메소드, 이벤트 처리기 메소드 이벤트 명이벤트 명 리스너 add 메소메소드 이벤트 처리기 메소드 (interface 메소드) ActionEvent ActionListener addActionListener() actionPerformed(ActionEvent e) TextEvent TextListener addTextListener() textValueChanged(TextEvent e) ItemEvent ItemListener addItemListener() itemStateChanged(ItemEvent e) AdjustmentEvent AdjustmentListener addAdjustmentListener() adjustmentValueChanged(AdjustmentEvent e) MouseEvent MouseListener addMouseListener() mouseClicked(MouseEvent e) mouseEntered(MouseEvent e) mouseExited(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e) MouseMotionEvent MouseMotionListener addMouseMotionListener() mouseDragged(MouseEvent e) mouseMoved(MouseEvent e) KeyEvent KeyListener addKeyListener() KeyPressed(KeyEvent e) KeyReleased(KeyEvent e) KeyTyped(KeyEvent e)

각 이벤트 종류별 리스너, add 메소드, 이벤트 처리기 메소드 Section 03 이벤트 처리 (6/8) 각 이벤트 종류별 리스너, add 메소드, 이벤트 처리기 메소드 이벤트 명이벤트 명 리스너 add 메소메소드 이벤트 처리기 메소드 (interface 메소드) WindowEvent WindowListener addWindowListener() windowActivated(WindowEvent e) windowClosed(WindowEvent e) windowClosing(WindowEvent e) windowDeactivated(WindowEvent e) windowDeiconified(WindowEvent e) windowIconified(WindowEvent e) windowOpened(WindowEvent e) FocusEvent FocusListener addFocusListener focusGained(FocusEvent e) focusLost(FocusEvent e) ComponentEvent ComponentListener addComponentListener() componentHidden(ComponentEvent e) componentMoved(ComponentEvent e) componentResized(ComponentEvent e) componentShown(ComponentEvent e) ContainerEvent ContainerListener addListener() componentAdded(ComponentEvent e) componentRemoved(ComponentEvent e)

이벤트와 컴포넌트와의 관계 Section 03 이벤트 처리 (7/8) 이벤트 명 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ActionEvent ●   TextEvent ItemEvent AdjustmentEvent MouseEvent MouseMotionEvent KeyEvent WindowEvent FocusEvent ComponentEvent ContainerEvent ( 1: Button, 2: Label, 3: Choice, 4: List, 5: Checkbox,    6: CheckboxMenuItem, 7:Scrollbar, 8:ScrollPane, 9: TextField,    10:TextArea, 11: Textcomponent, 12: Canvas, 13: MenuItem,    14: Component, 15: Container, 16: Frame, 17: Panel    18: Dialog, 19: Window )

이벤트 클래스의 계층 구조 Section 03 이벤트 처리 (8/8) java.awt.EventObject java.awt.AWTEvent java.awt.event.ActionEvent java.awt.event.TextEvent java.awt.event.ItemEvent java.awt.event.AdjustmentEvent java.awt.event.ComponentEvent java.awt.event.ContainerEvent java.awt.event.WindowEvent java.awt.event.FocusEvent java.awt.event.InputEvent java.awt.event.KeyEvent java.awt.event.MouseEvent

[실습하기 7-3] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (1/9)

[실습하기 7-3] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (2/9) 001  import java.awt.*; 002  import java.awt.event.*;  003  004  public class Jv_7_3 implements ActionListener, TextListener { 005  006        private Frame f; 007        private Label lb, lb0, lb1, lb2, lb3, lb4, lb5; 008        private Label lb6, lb7, label1, label2, label3; 009        private Button bt0, bt1, bt2, bt3, bt4, bt5; 010        private TextField t; 011        private TextArea ta1, ta2; 012        int m=0, n=0;    013        int i=0, j=0;    014  015        public Jv_7_3() { 016             f = new Frame("AWT(Abstract Window Toolkit)에                 온 것을 환영 합니다!"); 017  018          lb = new Label("당신이 좋아하는 지명을 선택하세요?"); 019  020          lb1 = new Label("천안 버튼:"); 021          bt1 = new Button("천안"); 022 Jv_7_3.java

[실습하기 7-3] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (3/9) 023          lb2 = new Label("당진 버튼:", Label.LEFT); 024          lb2.setBackground(Color.red); 025          bt2 = new Button("당진"); 026          bt2.setBackground(Color.red); 027       028          lb3 = new Label("속초 버튼:", Label.CENTER); 029          lb3.setBackground(Color.green); 030          bt3 = new Button("속초"); 031          bt3.setBackground(Color.green); 032      033          lb4 = new Label("서울 버튼:", Label.RIGHT); 034          lb4.setBackground(Color.blue); 035          bt4 = new Button("서울"); 036          bt4.setBackground(Color.blue); 037      038          lb5 = new Label("제주 버튼:"); 039          lb5.setBackground(Color.yellow); 040          bt5 = new Button("제주"); 041          bt5.setBackground(Color.yellow); 042  043          label3 = new Label("당신이 좋아하는 지명을 입력하세요?"); 044          t = new TextField(30); Jv_7_3.java

[실습하기 7-3] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (4/9) 045       t.setText("천안 / 당진 / 속초 / 서울 / 제주"); 046       t.setBackground(Color.green); 047  048       ta1 = new TextArea("천안\n속초", 3, 20); 049       ta2 = new TextArea("천안\n속초\n서울 \n제주", 5, 20); 050       m = ta1.getRows(); n = ta1.getColumns(); 051       lb6 = new Label("1st텍스트영역(줄:" + m + " 열:" + n +")"); 052       lb6.setBackground(Color.green);  053       i = ta2.getRows(); j = ta2.getColumns(); 054       lb7 = new Label("2nd텍스트영역(줄:" + i + " 열:" + j +")"); 055       lb7.setBackground(Color.yellow); 056  057       label1 = new Label("선택 결과==>"); 058       label1.setBackground(Color.green); 059       label2 = new Label("            "); 060       label2.setBackground(Color.green); 061       lb0 = new Label("종료 버튼:"); 062       bt0 = new Button("종료"); 063     } 064  065     public void startFrame() { 066   Jv_7_3.java

[실습하기 7-3] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (5/9) 067          f.setLayout(new FlowLayout()); 068  069          f.add(lb); 070  071          f.add(lb1); 072          f.add(bt1); 073  074          f.add(lb2); 075          f.add(bt2); 076  077          f.add(lb3); 078          f.add(bt3); 079  080          f.add(lb4); 081          f.add(bt4); 082  083          f.add(lb5); 084          f.add(bt5); 085  086          f.add(label3); 087          f.add(t); 088          f.add(lb6); Jv_7_3.java

[실습하기 7-3] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (6/9) 089          f.add(ta1); 090          f.add(lb7); 091          f.add(ta2); 092    093  094          f.add(label1); 095          f.add(label2); 096          f.add(lb0); 097          f.add(bt0);          098  099          f.setSize(300,500); 100          f.setVisible(true); 101  102          bt0.addActionListener(this); 103          bt1.addActionListener(this); 104          bt2.addActionListener(this); 105          bt3.addActionListener(this); 106          bt4.addActionListener(this); 107          bt5.addActionListener(this); 108          t.addActionListener(this); 109          t.addTextListener(this); 110      } Jv_7_3.java

[실습하기 7-3] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (7/9) 111  112     public static void main(String[] args) { 113        Jv_7_3 kkk = new Jv_7_3(); 114        kkk.startFrame();              115     } 116  117     public void actionPerformed(ActionEvent evt) { 118        String str = evt.getActionCommand(); 119        if (str.equals("종료")) { 120           System.exit(0); 121           } 122        else { 123           label2.setText(evt.getActionCommand());      124             } 125        } 126  127     public void textValueChanged(TextEvent tevt) { 128           ta1.append("textfield 내용: " + t.getText() + "\n"); 129           ta2.append("textfield 내용: " + t.getText() + "\n"); 130     } 131  } Jv_7_3.java

[실습하기 7-3] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (8/9) 002행: AWT(Abstract Window Toolkit) 이벤트와 연관된 클래스를 사용하기 위해 java.awt.event.* 패키지를 포함시키기 위해 import한다. 004행: ActionListener는 의미적(symantic) 이벤트 중의 하나인 액션 이벤트(ActionEvent)를 처리하기 위해 사용되는 인터페이스(interface)이다. TextListener는 의미적(symantic) 이벤트 중의 하나인 텍스트 이벤트(TextEvent)를 처리하기 위해 사용되는 인터페이스다. 102~108행: 버튼을 누를 때 이벤트(event)가 발생하도록 객체 버튼에 액션리스너(ActionListener)를 등록한다. this는 현재의 객체를 가리킨다.  예를 들면, bt0 = new Button("종료");에 의해 bt0 버튼을 생성하고, bt0.addActionListener(this);에 의해 bt0 버튼을 누를 때 이벤 트(vent)가 발생하도록 bt0 객체 버튼에 액션리스너(ActionListener)를 등록한다. 예를 들면, t = new TextField(30);에 의해 t 텍스트필드를 생성하고, t.addActionListener(this);에 의해 t 텍스트필드에 내용을 입력했을 때 이벤트(vent)가 발생하도록 t 텍스트필드 객체에 액션 리스너(ActionListener)를 등록한다. 117~125행: 이벤트가 발생하면 이벤트 처리를 위해 actionPerformed 메소드를 구현한다. actionPerformed 메소드는 ActionListener 인터페이스 내에 이미 정의가 되어 있다 프로그램 구조 설명

[실습하기 7-3] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (9/9) 118행: ActionEvent 클래스의 getActionCommand() 메소드를 이용하면 이벤트를 발생시킨 컴포넌트와 관련된 문자열을 식별한다. 여기서는 버튼의 이름을 얻을 수 있다. 119행: 버튼의 이름이 “종료”와 같은지를 묻는 if문이다. 120~121행: 버튼의 이름이 “종료”와 같으면 수행하는 과정이다. System.exit(0);는  System 클래스의 exit() 메소드를 호출하는 것이며, 자바 애플리케이션을 종료시킨다. 122~124행: 버튼의 이름이 “종료”와 같지 않으면 수행하는 과정이다. ActionEvent 클래스의 getActionCommand() 메소드를 이용하면 버튼의 이름을 얻어서 label2 객체의 버튼에 텍스트로 표시한다. 109행: 텍스트의 변화 유무가 있으면 이벤트(event)가 발생하도록 객체 텍스트에 텍스트 리스너(TextListener)를 등록한다. this는 현재의 객체를 가리킨다. 예를 들면, t = new TextField(30);에 의해 t 텍스트필드를 생성하고, t.addTextListener(this);에 의해 t 텍스트필드의 내용에 변화가 생겼을 때 이벤트(vent)가 발생하도록 t 텍스트필드 객체에 텍스트 리스너(TextListener)를 등록한다. 127~130행: 이벤트가 발생하면 이벤트 처리를 위해 textValueChanged() 메소드를 구현한다. t.getText()에 의해 텍스트필드에 입력된 문자열을 반환한다. ta1.append(x)에 의해 ta1 객체 텍스트 영역의 끝에 문자열 x가 첨가된다. ta2.append(y)에 의해 ta2 객체 텍스트 영역의 끝에 문자열 y가 첨가된다. 프로그램 구조 설명

[실습하기 7-4] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (1/10)

[실습하기 7-4] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (2/10) 001  import java.awt.*; 002  import java.awt.event.*; 003  004  public class Jv_7_4 extends Frame implements ActionListener,                                 ItemListener, AdjustmentListener { 005     Checkbox ch, da, so, se, je; 006     Checkbox gch, gda, gso, gse, gje; 007     CheckboxGroup cbg; 008     Label label1, label2, label3, label4, label5, lb0; 009     Scrollbar vSlider, hSlider; 010     Canvas imgCanvas; 011     Button bt0; 012     String msg1 = " "; 013     String msg2 = " "; 014  015     public Jv_7_4() { 016        super("단순 컴포넌트 - 체크박스와 라디오버튼 /리스트와 초이스/                   수직  및 수평 스크롤바 / 이미지 캔버스"); 017        setLayout(new FlowLayout()); 018  019        ch = new Checkbox("천안", null, true); 020        da = new Checkbox("당진"); 021        so = new Checkbox("속초"); 022        se = new Checkbox("서울"); Jv_7_4.java

[실습하기 7-4] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (3/10) 023        je = new Checkbox("제주"); 024        add(ch); 025        add(da); 026        add(so); 027        add(se); 028        add(je); 029  030        cbg = new CheckboxGroup(); 031        gch = new Checkbox("천안", cbg, false); 032        gda = new Checkbox("당진", cbg, false); 033        gso = new Checkbox("속초", cbg, true); 034        gse = new Checkbox("서울", cbg, false); 035        gje = new Checkbox("제주", cbg, false); 036        add(gch); 037        add(gda); 038        add(gso); 039        add(gse); 040        add(gje); 041     042        List list = new List(3, false);   043        list.add("천안"); 044        list.add("당진"); Jv_7_4.java

[실습하기 7-4] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (4/10) 045        list.add("속초"); 046        list.add("서울"); 047        list.add("제주"); 048        add(list); 049  050        Choice choice = new Choice(); 051        choice.add("천안"); 052        choice.add("당진"); 053        choice.add("속초"); 054        choice.add("서울"); 055        choice.add("제주"); 056        add(choice); 057  058        label4 = new Label("<수직 또는 수평스크롤바 움직이면              ==> 캔버스 색깔 바뀜>", Label.CENTER); 059        add(label4);   060        label1 = new Label("수직 스크롤바: ", Label.CENTER); 061        label2 = new Label("수평 스크롤바: ", Label.CENTER); 062        vSlider = new Scrollbar(Scrollbar.VERTICAL, 0,1,0,100); 063        hSlider = new Scrollbar(Scrollbar.HORIZONTAL, 0,4,0,50); 064        add(label1); 065        add(vSlider); 066        add(label2); Jv_7_4.java

[실습하기 7-4] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (5/10) 067        add(hSlider); 068  069        label3 = new Label("이미지 캔버스: ", Label.CENTER); 070        imgCanvas = new Canvas(); 071        imgCanvas.setBackground(Color.yellow); 072        imgCanvas.setSize(200,150); 073        add(label3); 074        add(imgCanvas); 075  076        lb0 = new Label("종료 버튼:"); 077        bt0 = new Button("종료"); 078        add(lb0); 079        add(bt0);          080  081        setSize(730, 450); 082        setVisible(true); 083  084        bt0.addActionListener(this); 085        ch.addItemListener(this); 086        da.addItemListener(this); 087        so.addItemListener(this); 088        se.addItemListener(this); Jv_7_4.java

[실습하기 7-4] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (6/10) 089        je.addItemListener(this); 090        gch.addItemListener(this); 091        gda.addItemListener(this); 092        gso.addItemListener(this); 093        gse.addItemListener(this); 094        gje.addItemListener(this); 095        vSlider.addAdjustmentListener(this); 096        hSlider.addAdjustmentListener(this); 097       } 098  099     public static void main(String[] args) { 100        Jv_7_4 c1 = new Jv_7_4();             101     } 102  103    public void actionPerformed(ActionEvent evt) { 104        String str = evt.getActionCommand(); 105        if (str.equals("종료")) 106            System.exit(0); 107    } 108    109    public void itemStateChanged(ItemEvent ie) { 110        repaint();     111    } Jv_7_4.java

[실습하기 7-4] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (7/10) 112  113    public void adjustmentValueChanged(AdjustmentEvent ae) { 114        imgCanvas.setBackground(Color.green); 115        imgCanvas.repaint(); 116    } 117    public void paint(Graphics g) { 118        msg1 = "<체크상자를 선택하면 상태를 알수 있음>"; 119        g.drawString(msg1, 100, 320);   120        msg1 = "천안(체크상자): " + ch.getState(); 121        g.drawString(msg1, 100, 340);   122        msg1 = "당진(체크상자): " + da.getState(); 123        g.drawString(msg1, 100, 360);   124        msg1 = "속초(체크상자): " + so.getState(); 125        g.drawString(msg1, 100, 380);   126        msg1 = "서울(체크상자): " + se.getState(); 127        g.drawString(msg1, 100, 400);   128        msg1 = "제주(체크상자): " + je.getState(); 129        g.drawString(msg1, 100, 420);   130          131        msg2 = "<라디오 버튼을 선택하면 선택을 알수 있음>"; 132        g.drawString(msg2, 400, 320);   133        msg2 = "선택한 지명(라디오버튼): "; 134        msg2 += cbg.getSelectedCheckbox().getLabel(); Jv_7_4.java

[실습하기 7-4] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (8/10) 135        g.drawString(msg2, 400, 340);   136   } 137  } Jv_7_4.java

[실습하기 7-4] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (9/10) 004행: ActionListener는 의미적(symantic) 이벤트 중의 하나인 액션 이벤트(ActionEvent)를 처리하기 위해 사용되는 인터페이스(interface)이다. ItemListener는 의미적(symantic) 이벤트 중의 하나인 아이템(체크박스와 라디오 버튼, 리스트와 초이스)을 갖는 컴포넌트의 이벤트 처리를 하기 위해 사용되는 인터페이스다. AdjustmentListener는 의미적(symantic) 이벤트 중의 하나인 스크롤바의 값이 변경되었을 때 처리하기 위해 사용되는 인터페이스다. 084행: 버튼을 누를 때 이벤트(event)가 발생하도록 객체 버튼에 액션리스너(ActionListener)를 등록한다. this는 현재의 객체를 가리킨다. 예를 들면, bt0 = new Button("종료");에 의해 bt0 버튼을 생성하고, bt0.addActionListener(this);에 의해 bt0 버튼을 누를 때 이벤트(vent)가 발생하도록 bt0 객체 버튼에 액션리스너(ActionListener)를 등록한다. 085~094행: 아이템(체크박스와 라디오 버튼, 리스트와 초이스)을 선택할 때이벤트(event)가 발생하도록 객체 아이템에 아이템 리스너(ItemListener)를 등록한다. this는 현재의 객체를 가리킨다. 예를 들면, da = new Checkbox("당진");에 의해 체크박스의 da 아이템을 생성하고, da.addItemListener(this);에 의해 체크상자의 da 아이템을 선택할 때 이벤트(event)가 발생하도록 da 객체 아이템에 아이템 리스너(ItemListener)를 등록한다 프로그램 구조 설명

[실습하기 7-4] AWT의 버튼 클래스, 레이블 클래스, 텍스트필드) 및 텍스트 영역 클래스에서 의미적(symantic) 이벤트 처리 (10/10) 095~096행:  스크롤바의 값이 변경될 때 객체 버튼에 어드저스트먼트 리스너AdjustmentListener)를 등록한다. this는 현재의 객체를 가리킨다. 103~107행: ActionEvent 클래스의 getActionCommand() 메소드를 이용하면 이벤트를 발생시킨 컴포넌트와 관련된 문자열을 식별한다. 여기서는 버튼의 이름을 얻을 수 있다. 버튼의 이름이 “종료”와 같은 지를 묻는 if문이다. 버튼의 이름이 “종료”와 같으면 수행하는 과정이다. System.exit(0);는  System 클래스의 exit() 메소드를 호출하 는 것이며, 자바 애플리케이션을 종료시킨다. 자바 애플리케이션을 강제로 종료시키기 위해  Ctrl키와 C 키를 동시에 누를 필요가 없다.  109~111행: 아이템의 상태 변화가 발생하면 repaint(); 메소드에 의해 paint() 메소드가 실행된다. 117~136행: 화면에 그리기 위해 paint() 메소드를 사용한 경우이다. Graphics 클래스에 있는 g라는 객체다. Graphics 클래스에 있는 g라는 객체의 drawString() 메소드를 사용해 화면에 문자열을 출력한다. “<체크상자를 선택하면 상태를 알수 있음>”이라는 문자열은 좌, 윗 상단을 0으로하여 x좌표(좌에서 우로) 100, y좌표(우에서 아래로) 320 픽셀의 위치부터 출력한다. 상태는 getState() 메소드를 사용해 얻을 수 있다. 113~116행: 이벤트가 발생하면 이벤트 처리를 위해 adjustmentValueChanged() 메소드를 구현한다. 이미지 캔버스에 초록색으로 다시 칠하게 된다. 프로그램 구조 설명