StudentMapApp / (아이디,비밀번호,이메일 -입력)RegualarExpressionApp / (화면에 창뜨게함) FrameOneApp & FrameTwoApp / ComponentAddApp / NonLayoutManagerApp / BorderLayoutApp / FlowLayoutApp / PanelApp / MenuBarApp / EventHandleApp
StudentMapApp
package xyz.itwill.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class StudentMapApp {
public static void main(String[] args) {
List<Student> studentListOne = new ArrayList<Student>();
studentListOne.add(new Student(1000,"강백호"));
studentListOne.add(new Student(2000,"서태웅"));
studentListOne.add(new Student(3000,"정대만"));
studentListOne.add(new Student(4000,"채치수"));
studentListOne.add(new Student(5000,"송태섭"));
List<Student> studentListTwo = new ArrayList<>();
studentListTwo.add(new Student(6000,"유재석"));
studentListTwo.add(new Student(7000,"강호동"));
studentListTwo.add(new Student(8000,"신동엽"));
studentListTwo.add(new Student(9000,"김용만"));
Map<Integer, List<Student>> studentListMap = new HashMap<>();
studentListMap.put(1,studentListOne);
studentListMap.put(2,studentListTwo);
for (Integer ban : studentListMap.keySet()) {
System.out.println(ban + " 반의 학생정보 >> ");
List<Student> studentList = studentListMap.get(ban);
for (Student student : studentList) {
System.out.println(student);
}
System.out.println();
}
}
}
1 반의 학생정보 >>
학번 = 1000, 이름 = 강백호
학번 = 2000, 이름 = 서태웅
학번 = 3000, 이름 = 정대만
학번 = 4000, 이름 = 채치수
학번 = 5000, 이름 = 송태섭
2 반의 학생정보 >>
학번 = 6000, 이름 = 유재석
학번 = 7000, 이름 = 강호동
학번 = 8000, 이름 = 신동엽
학번 = 9000, 이름 = 김용만
RegualarExpressionApp
package xyz.itwill.util;
// 정규표현식(RegualarExpression) : 메타문자 (Meta Character), 회피문자 (Escape Character) 등을
// 사용하여 일정한 규칙의 문자열을 표현하는 방법 - 사용자 입력값에 대한 검증
// 사용하여 일정한 규칙의 문자열을 표현하는 방법 - 사용자 입력값에 대한 검증
^문자 - 문자(열)로 시작됨
문자& - 문자(열)로 종료됨
. - 임의의 문자 하나를 의미 (\문자는 표현 불가능)
[문자1문자2문자3] - 나열된 문자 중 하나
[^문자1문자2문자3] - 나열된 문자를 제외한 문자 중 하나
[문자1 - 문자2] - [문자1]에서 [문자2] 범위
문자열1|문자열2|문자열3 - 나열된 문자열 중 하나
문자열+ - 문자열이 1번이상 반복됨
문자열* - 문자열이 0번이상 반복됨
문자열? - 무낮열이 0번 또는 1번 존재
문자열{숫자} - 문자열이 [숫자]만큼 반복됨
문자열{숫자1, 숫자2} - 문자열이 [숫자 1]부터 [숫자2]범위만큼 반복됨
(?!)문자열 - 문자열에서 대소문자를 구분하지 않음
(? = 문자열) - 문자열이 반드시 포함됨
(! = 문자열) - 문자열이 반드시 초함되지 않음
\s - 공백이 있는 문자열
\S - 공백이 없는 문자열
\w - 영문자, 숫자, 특수문자(_)의 문자로만 구성된 문자열
\W - 영문자, 숫자, 특수문자(_)의 문자를 제외한 나머지 구성된 문자열
\d - 숫자 형태의 문자로만 구성된 문자열
\D - 숫자 형태의 문자를 제외한 문자로 구성된 문자열
\메타문자 - 메타문자를 일반문자로 표현됨 ex) \. = .
\S - 공백이 없는 문자열
\w - 영문자, 숫자, 특수문자(_)의 문자로만 구성된 문자열
\W - 영문자, 숫자, 특수문자(_)의 문자를 제외한 나머지 구성된 문자열
\d - 숫자 형태의 문자로만 구성된 문자열
\D - 숫자 형태의 문자를 제외한 문자로 구성된 문자열
\메타문자 - 메타문자를 일반문자로 표현됨 ex) \. = .
아이디
// 키보드로 사용자에게 값을 입력받아 형식에 맞는 값인지를 비교하여 출력하는 프로그램
// > 형식에 맞지 않는 값이 입력될 경우 에러 메세지 출력 후 프로그램 종료
public class RegualarExpressionApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 사용자에게 아이디를 입력받아 형식에 맞는 값인지를 비교
// 아이디 패턴(패턴) : 영문자로 시작되며 영문자, 숫자, 특수문자(_)의 조합으로 6~20번위의 문자로 구성
// 6 ~ 20 범위의 문자들로 구성된 문자열
System.out.print("아이디 입력 >> ");
String id = scanner.nextLine();
if (id == null || id.equals("")) { // 사용자 입력값이 없는 경우
System.out.println("[에러]아이디를 반드시 입력해 주세요.");
System.exit(0);
}
// 아이디 패턴을 정규표현식으로 표현하여 저장
// String idReg = "^[a-zA-Z] [a-zA-Z0-9_] {5,19}$";
String idReg = "^[a-zA-Z]\\w{5,19}$"; // (띄어쓰기하면 실행안됨)△ 또는
// Pattern 클래스 - 정규표현식을 사용하기 위한 기능의 메소드를 제공하는 클래스
// Pattern.matches(String regEx, CharSequence input) - 정규표현식과 입력값을 비교하여
// 정규표현식의 패턴과 입력값이 다르면 [false]를 반환하고 같으면 [true]를 반환하는 메소드
if (!Pattern.matches(idReg,id)) { // idReg 와 id가 !같지않다면,
System.out.println("[에러]아이디를 형식에 맞게 입력해 주세요.");
System.exit(0);
}
System.out.println("[메세지]형식에 맞는 아이디를 입력 하였습니다.");
scanner.close();
아이디 입력 >> chellog0421
[메세지]형식에 맞는 아이디를 입력 하였습니다.
비밀번호
public class RegualarExpressionApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 사용자에게 비밀번호를 입력받아 형식에 맞는 값인지를 비교
// 비밀번호 패턴(패턴) : 영문자, 숫자, 특수문자가 반드시 1번이상 포함되며
// 8 ~ 30 범위의 문자들로 구성된 문자열
System.out.print("비밀번호 입력 >> ");
String password = scanner.nextLine();
if (password == null || password.equals("")) {
System.out.println("[에러]비밀번호를 반드시 입력해 주세요.");
System.exit(0);
}
String passwordReg = "^(?=.*[a-zA-Z]) (?=.*[0-9]) (?=.*[~!@#$%^&*_-]) {8,30}$";
// △(?=.*[~!@#$%^&*_-]) 중 - 는 사이에 넣으면 범위가 되어버리기때문에, 굳이 넣고싶다면 끝에 넣기
System.out.println("[메세지]형식에 맞는 비밀번호를 입력 하였습니다.");
scanner.close();
비밀번호 입력 >> 23456chch!
[메세지]형식에 맞는 비밀번호를 입력 하였습니다.
이메일
public class RegualarExpressionApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 사용자에게 이메일를 입력받아 형식에 맞는 값인지를 비교
// 이메일 형식(패턴) : [아이디@도매인] 형식의 문자열
System.out.print("이메일 입력 >> ");
String email = scanner.nextLine();
if (email == null || email.equals("")) {
System.out.println("[에러]이메일을 반드시 입력해 주세요.");
System.exit(0);
}
String emailReg="^([a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+)*$";
// \\.[a-zA-Z0-9_-]+)+)*$"; // 닷컴
if (!Pattern.matches(emailReg,email)) {
System.out.println("[에러]이메일을 형식에 맞게 입력해 주세요.");
System.exit(0);
}
System.out.println("[메세지] 형식에 맞는 이메일을 입력 하였습니다.");
scanner.close();
}
}
이메일 입력 >> chch0421@nnnnn.com
[메세지] 형식에 맞는 이메일을 입력 하였습니다.
// CUI(Character User Interface) 프로그램 : 문자 중심의 실행 환경에서 동작되는 프로그램
// GUI 프로그램 (Graphic User Interface) 프로그램 : 그래픽 중심의 실행 환경에서 동작되는 프로그램
// > 컴퍼넌트를 이용하여 작성된 프로그램
// java.awt 패키지 : GUI 프로그램을 작성하기 위한 클래스가 선언된 패키지
// > 운영체제(OS)에 종속된 컴퍼넌트 제공
// javax.swing 패키지 : GUI 프로그램을 작성하기 위한 클래스가 선언된 패키지
// > java.awt 패키지의 확장 패키지 - Java 컴퍼넌트 제공
// 컴퍼넌트(Component) : GUI 프로그램에서 사용자 환경 (UI - User Interface) 를 구현하기 위한 클래스
// > Button, List, Label, Canvas, Checkbox, Choice, Scrollbar, TextField, TextArea 등
// 컨테이너(Container) : 컴퍼넌트를 배치할 수 있는 컴퍼넌트
// > 독립적 컨테이너 : Frame, Window, Dialog 등 - 독립적으로 사용 가능
// > 종속적 컨테이너 : Panel, ScrollPane 둥 - 다른 컨테이너에 배치하여 사용 가능
// GUI 프로그램 (Graphic User Interface) 프로그램 : 그래픽 중심의 실행 환경에서 동작되는 프로그램
// > 컴퍼넌트를 이용하여 작성된 프로그램
// java.awt 패키지 : GUI 프로그램을 작성하기 위한 클래스가 선언된 패키지
// > 운영체제(OS)에 종속된 컴퍼넌트 제공
// javax.swing 패키지 : GUI 프로그램을 작성하기 위한 클래스가 선언된 패키지
// > java.awt 패키지의 확장 패키지 - Java 컴퍼넌트 제공
// 컴퍼넌트(Component) : GUI 프로그램에서 사용자 환경 (UI - User Interface) 를 구현하기 위한 클래스
// > Button, List, Label, Canvas, Checkbox, Choice, Scrollbar, TextField, TextArea 등
// 컨테이너(Container) : 컴퍼넌트를 배치할 수 있는 컴퍼넌트
// > 독립적 컨테이너 : Frame, Window, Dialog 등 - 독립적으로 사용 가능
// > 종속적 컨테이너 : Panel, ScrollPane 둥 - 다른 컨테이너에 배치하여 사용 가능
FrameOneApp
package xyz.itwill.awt;
import java.awt.*;
public class FrameOneApp {
public static void main(String[] args) {
// Frame : 메뉴가 존재하는 컨테이너를 생성하기 위한 클래스
// Frame frame = new frame
Frame frame = new Frame();
// Component.setSize(int width, int height) : 컴퍼넌트의 크기를 변경하는 메소드
// > GUI 프로그램에서 크기 또는 위치를 표현하는 단위는 픽셀(Pixel) 단위로 표현하여 설정
frame.setSize(400,300); // 픽셀 400*300 사이즈 창 만들거임
// Component.setSize(int x, int y) : 컴퍼넌트의 출력 위치를 변경하는 메소드
frame.setLocation(600,100);
// Component.setVisible(boolean b) : 컴퍼넌트를 보이지 않게 처리하거나 보이도록 처리하는 메소드
// true 보여지도록 처리 / false 보이지않도록 처리
frame.setVisible(true);
}
}
FrameTwoApp
package xyz.itwill.awt;
import java.awt.*;
// GUI 프로그램을 UI 구성 및 이벤트 처리를 위해 Frame 클래스를 상속받아 작성하는 것을 권장
public class FrameTwoApp extends Frame {
private static final long serialVersionUID = 1l;
// 생성자에서 프레임을 구성하는 디자인 설정 - UI 구형
public FrameTwoApp(String title) {
super(title); // Frame(String title) 생성자를 이용하여 Frame 객체 생성
// Frame.setTitle(String title) 프레임의 제목을 변경하는 메소드
// setTitle(title);
// Component.setBounds(int x, int y, int width, int height) : 컴퍼넌트의 출력 위피와 크기를 변경하는 메소드
setBounds(600, 100, 400, 300);
// Frame.setResizable(boolean resize) : 프레임의 크기 변경 여부를 설정하기 위한 메소드
// > false : 프레임 크기 변경 불가능, true : 프레임 크기 변경 가능 - 기본
// setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
//Frame 클래스를 상속받은 자식클래스로 객체 생성
// > Frame 객체 생성 - 프레임 생성
new FrameTwoApp("프레임 연습");
}
}
module-info.java *(인텔리제이는 없어야 실행됨 : 읽을수없다고 코드뜸)
module Java_3{
requires java.se;
}
ComponentAddApp
package xyz.itwill.awt;
import java.awt.Button;
import java.awt.Frame;
public class ComponentAddApp extends Frame {
private static final long serialVersionUID = 1L;
public ComponentAddApp(String title) {
super(title);
// Button 클래스 : 버튼 컴퍼넌트을 구현하기 위한 클래스
// > Button 클래스의 Button(String label) 생성자로 버튼의 이름이 설정된 Button 객체 생성
Button button=new Button("BUTTON");
// Container.add(Component c) : 컨테이너에 컴퍼넌트를 배치하는 메소드
// > 컨테이너에 설정된 배치관리자(LayoutManager)에 의해 컴퍼넌트가 출력 위치와
// 크기가 자동 설정되어 컨테이너에 배치
add(button);
setBounds(600, 100, 300, 300);
setVisible(true);
}
public static void main(String[] args) {
new ComponentAddApp("컴퍼넌트 배치");
}
}
NonLayoutManagerApp
package xyz.itwill.awt;
// 배치관리자 : 컨테이너에 컴퍼넌트를 자동 배치하기 위한 기능을 제공하는 클래스
// > BorderLayout, FlowLayout, GridLayout, CardLayout 등
// 컨테이너는 컴퍼넌트를 자동 배치하기 위한 배치관리자가 초기화 설정 - 기본 배치관리자
// > Frame, Window, Dialog 등 : BorderLayout
// > Panel, Applet 등 : FlowLayout
import java.awt.*;
// 배치관리자를 사용하지 않고 프레임에 컴퍼넌트를 배치하여 사용하는 프로그램
public class NonLayoutManagerApp extends Frame {
private static final long serialVersionUID = 1l;
public NonLayoutManagerApp(String title) {
super(title);
// Container.set
// Container.setLayout (LayoutManager mrg): 컨테이너의 배치관리자를 변경하는 메소드
setLayout(null); // 프레임은 배치관리자를 사용하지 않도록 설정
Button button1 = new Button("BUTTON-1");
Button button2 = new Button("BUTTON-2");
// 배치관리자를 사용하지 않을 경우 반드시 컴퍼넌트의 크기와 출력위치를 변경한 후 배치
button1.setBounds(80, 100, 150, 80);
button2.setBounds(190, 300, 100, 120);
add(button1);
add(button2);
setBounds(600, 100, 400, 500);
setVisible(true);
}
public static void main(String[] args) {
new NonLayoutManagerApp("배치관리자 미사용");
}
}
BorderLayoutApp
package xyz.itwill.awt;
import java.awt.*;
// BorderLayout : 컴퍼넌트를 중앙, 동, 서, 남, 북 으로 구분하여 배치하는 배치관리자
// > 컴퍼넌트를 배치할 때 반드시 배치위치를 제공
public class BorderLayoutApp extends Frame {
private static final long serialVersionUID = 1l;
public BorderLayoutApp(String title) {
super(title);
// 프레임의 배치관리자를 으로 변경
// > Frame의 기본 배치관리자는 이므로 생략 가능
// setLayout(new BorderLayout());
Button button1 = new Button("Center");
Button button2 = new Button("East");
Button button3 = new Button("West");
Button button4 = new Button("South");
Button button5 = new Button("North");
// Container.add(Component c, Object constraints) :
// 컴퍼넌트를 컨테이너의 원하는 위치에 배치하는 메소드 - 배치관리자가 [BorderLayout]인 경우에만 사용
// > 컴퍼넌트가 배치되는 위치는 BorderLayout 클래스의 상수(Constant) 사용
// > 컨테이너의 중앙에는 반드시 컴퍼넌트를 배치해야 되지만 동서남북은 생략 가능
add(button1, BorderLayout.CENTER);
add(button2, BorderLayout.EAST);
add(button3, BorderLayout.WEST);
add(button4, BorderLayout.SOUTH);
add(button5, BorderLayout.NORTH);
setBounds(600, 100, 400, 400);
setVisible(true);
}
public static void main(String[] args) {
new BorderLayoutApp("BorderLayout");
}
}
PanelApp
package xyz.itwill.awt;
import java.awt.*;
public class PanelApp extends Frame {
private static final long serivalVersionUID = 1L;
public PanelApp (String title) {
super(title);
Button red = new Button("RED");
Button green = new Button("GREEN");
Button blue = new Button("BULE");
// TextField 클래스 : 한 줄의 문자열을 입출력하기 위한 컴퍼넌트
TextField textField = new TextField();
// TextArea 클래스 : 여러 줄의 문자열을 입출력하기 위한 컴퍼넌트
TextArea textArea = new TextArea();
// Panel 클래스 : 컴퍼넌트를 배치하여 그룹화 하기 위한 종속적인 컨테이너 클래스
// > 독립적인 사용 불가능한 컨테이너이므로 다른 컨테이너에 배치하여 사용
Panel panel=new Panel();//[FlowLayout]이 기본 배치관리자
// 패널 컨테이너에 버튼 컴퍼넌트를 차례대로 배치
panel.add(red);
panel.add(green);
panel.add(blue);
add(panel, BorderLayout.NORTH);
add(textArea, BorderLayout.CENTER);
add(textField, BorderLayout.SOUTH);
// Component.setFont(Font f) : 컴퍼넌트의 글자 관련 속성을 변경하는 메소드
// Font 클래스 : 글자 관련 속성을 저장하기 위한 클래스
// > Font 클래스의 Font(String name, int style, int size) 생성자로 Font 객체 생성
// > name : 글자의 글꼴, style : 글자 스타일, size : 글자 크기
// > 글자의 글꼴과 스타일은 Font 클래스에서 제공하는 상수(Constant) 사용
// 컨테이너에 적용된 글자 관련 속성은 컨테이너에 배치된 컴퍼넌트에 동일하게 적용
panel.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));
textArea.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 20));
textField.setFont(new Font(Font.SANS_SERIF, Font.BOLD+Font.ITALIC, 18));
// Component.setForeground(Color c) : 컴퍼넌트 글자색을 변경하는 메소드
// Color 클래스 : 색상 정보를 저장하기 위한 클래스
// > Color 클래스의 Color(int red, int green, int blue) 생성자로 Color 객체 생성
// > 빨간색, 초록색, 파란색은 0~255 범위의 정수값으로 표현
// > Color 클래스는 대표색을 상수(Color 객체)로 제공
red.setForeground(new Color(255, 0, 0));
green.setForeground(new Color(0, 255, 0));
blue.setForeground(new Color(0, 0, 255));
// Component.setBackground(Color c) : 컴퍼넌트 배경색을 변경하는 메소드
textArea.setBackground(Color.YELLOW);
// Component.setEnabled(boolean b) : 컴퍼넌트의 활성화 상태 여부를 변경하는 메소드
red.setEnabled(false); // 컴퍼넌트 비활성화
// TextComponent.setFocusable(boolean b) : 텍스트 컴퍼넌트의 입력촛점 위치 여부를 변경하는 메소드
textArea.setFocusable(false); // 입력촛점 미제공 - 입력 불가능
setBounds(600, 100, 300, 400);
setVisible(true);
}
public static void main(String[] args) {
new PanelApp("Panel");
}
}
MenuBarApp
package xyz.itwill.awt
import java.awt.*;
import java.awt.event.KeyEvent;
// MenuItem >> Menu >> MenuBar >> Frame
public class MenuBarApp extends Frame {
private static final long serialVersionUID = 1L;
public MenuBarApp(String title) {
super(title);
MenuBar menuBar=new MenuBar();
Menu file = new Menu("File");
Menu help = new Menu("Help");
menuBar.add(file); // 메뉴바에 메뉴 배치
menuBar.add(help);
// MenuShortcut 클래스 : 메뉴아이템에 단축키를 제공하기 위한 클래스
// KeyEvent 클래스 : 가상의 키보드 정보를 제공하기 위한 클래스
MenuItem open = new MenuItem("Open", new MenuShortcut(KeyEvent.VK_O));
MenuItem save = new MenuItem("Save", new MenuShortcut(KeyEvent.VK_S));
MenuItem exit = new MenuItem("Exit");
MenuItem view = new MenuItem("HelpView");
MenuItem info = new MenuItem("Infomation");
file.add(open); // 메뉴에 메뉴아이템 배치
file.add(save);
file.addSeparator(); // 메뉴에 메뉴아이템을 구분하는 구분선 배치
file.add(exit);
help.add(view);
help.addSeparator();
help.add(info);
//Frame.setMenuBar(MemuBar bar) : 프레임의 메뉴바를 변경하는 메소드
setMenuBar(menuBar);
TextArea textArea = new TextArea();
textArea.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 20));
add(textArea, BorderLayout.CENTER);
setBounds(500, 100, 1000, 800);
setVisible(true);
}
public static void main(String[] args) {
new MenuBarApp("MenuBar");
}
}
EventHandleApp
package xyz.itwill.awt;
// 이벤트 처리 프로그램 작성 방법
// 1. 컴퍼넌트와 컨테이너 관련 클래스를 사용하여 디자인 클래스 작성 - UI 구현
// > Frame 클래스를 상속받아 디자인 클래스 작성
// > 컴퍼넌트 또는 컨테이너에서 다양한 이벤트 발생 - 이벤트 소스(Event Source)
// > 이벤트와 관련된 XXXEvent 클래스(이벤트 정보를 저장하기 위한 클래스)로 객체가 자동 생성
// ex) Button 컴퍼넌트를 누른 경우 ActionEvent 클래스로 객체 생성 - ActionEvent 발생
// [EXIT] 버튼을 누른 경우 프로그램을 종료하는 기능의 프로그램 작성
// 2.이벤트 소스에서 발생된 이벤트를 처리하기 위한 클래스 작성
// > 이벤트를 처리하기 위한 XXXListener 인터페이스를 상속받아 이벤트 처리 클래스 작성
// ex) ActionEvent >> ActionListener 인터페이스를 상속받아 이벤트 처리 클래스 작성
// > Listener 인터페이스에서 컴퍼넌트에서 발생된 이벤트를 처리하기 위해 추상메소드 제공
// > Listener 인터페이스를 상속받은 자식클래스에서 추상메소드를 오버라이드 선언하여
// 오버라이드 선언된 메소드에 이벤트 처리 명령 작성
// 3.이벤트 소스에서 이벤트가 발생되면 이벤트 처리 클래스의 객체를 제공받아 이벤트 처리 명령이
// 실행되도록 설정 - Component.addXXXListener(Listener l) 메소드 호출
// > Component.addXXXListener(Listener l) : 컴퍼넌트의 이벤트를 처리하기 위한 이벤트 처리
// 객체를 등록하기 위한 메소드
// > 이벤트 처리 객체를 제공받아 자동으로 이벤트 처리 메소드를 호출하여 이벤트 처리
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
// [EXIT] 버튼을 누르면 프로그램을 종료하는 GUI 프로그램 작성
public class EventHandleApp extends Frame {
private static final long serialVersionUID = 1L;
public EventHandleApp(String title) {
super(title);
setLayout(new FlowLayout());
Button exit=new Button("EXIT");//이벤트 소스
exit.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 30));
add(exit);
// 컴퍼넌트에 이벤트 처리 객체 등록
// > Button 컴퍼넌트에서 ActionEvent가 발생될 경우 EventHandle 클래스의 객체를
//제공받아 이벤트 처리 메소드를 자동 호출하여 이벤트 처리
exit.addActionListener(new EventHandle());
setBounds(800, 200, 300, 300);
setVisible(true);
}
public static void main(String[] args) {
new EventHandleApp("이벤트처리");
}
}
// 이벤트 처리 기능을 제공하기 위한 클래스 - Listener 인터페이스를 상속받아 작성
// > Button 컴퍼넌트에서 발생된 ActionEvent를 처리하기 위한 클래스
class EventHandle implements ActionListener {
// 이벤트 처리 명령을 작성하기 위한 메소드
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}