※ AWT (Abstract Window Toolkit)
- Window프로그래밍 (GUI 프로그래밍)을 하기 위한 도구
- GUI 어플리케이션의 개발에 필요한 여러 개의 관련 패키지와 클래 스의 집합으로 구성
GUI (Graphic User Interface) - 사용자가 그래픽을 통해서 하드웨 어와 상호작용하는 환경을 말함
- AWT 는 해당 OS의 컴포넌트(native component)를 사용하기 때문에 AWT로 작성된 GUI 어플리케이션의 외양이
실행되는 OS마다 달라질 수 있다
- Swing : AWT 를 확장한 것.
- Swing은 AWT를 확장한 것으로 AWT와는 달리 순수한 자바로 이루어져 있어서
AWT보다 다양하고 풍부한 기능의 컴포넌트를 제공한다.
- Swing의 클래스들이 AWT의 클래스들을 기반으로 만들어진 자손 클래스들이므로
AWT와 Swing은 컴포넌트의 종류와 사용법만 조금 다를 뿐 나머지는 거의 같다
▶ AWT 관련패키지
- java.awt : AWT를 이용한 GUI 어플리케이션을 작성하는데 필요한 기본적인 클래스와 컴포넌트를 제공하는 패키지
- java.awt.event : GUI 어플리케이션에서 발생하는 이벤트를 처리하는데 필요한 클래스와 인터페이스를 제공하는 패키지
▶ AWT 구현순서 : 반드시 Container 가 제일 밑에 깔리고 그 위에 Component 가 올라와야 함
▶ Component
: 실제로 Container 위에 올려져서 화면 구성을 담당하는 요소들 ex) Button, TextField, CheckBox
- 메뉴와 관련된 컴포넌트들을 제외한 모든 컴포넌트의 조상은 Component 클래스이고, 추상클래스이다 - Component 클래스의 조상은 Object클래스 - Component 클래스와 그 자손 클래스들은 윈도우, 스크롤 바, 버튼 등 GUI 응용 프로그램의 화면을 구성하는데 사용 되는 클래스들임

▶ Container
: 프로그램의 창의 역할 - 한개 이상의 컨테이너위에 컴포넌트들이 올려질영역 ex) Frame, Panel, Dialog
- Component의 자손들 중에 Container와 그 자손들
- 컴포넌트들 포함 가능, 컨테이너가 컨테이너를 포함 가능. 따라서 Button, Label 과 같은 컴포넌트들을 포함할 수 있다.
독립적인 컨테이너 : 다른 컴포넌트나 종속적인 컨테이너를 포함할 수 있음
( Frame ), ( Window ), ( Dialog )
종속적인 컨테이너 : 독립적으로 사용될 수 없으며, 다른 컨테이너에 포함되어야만 함
( Panel ), ( ScrollPane)
※ 레이아웃 매니저
- 컨테이너에 포함된 컴포넌트들의 배치(Layout)를 자동적으로 관리해주는 일을 한다.
- 컨테이너에 새로운 컴포넌트가 추가되거나 컨테이너의 크기가 변경되었을 경우,
컨테이너에 포함된 컴포넌트들의 재배치를 자동적으로 처리해준다.
▶ BorderLayout
- 컨테이너를 North, South, East, West, Center 모 두 5개의 영역으로 나누고,
각 영역에 하나의 컴포넌트만을 배치할 수 있도록 함
- 한 영역에 하나 이상의 컴포넌트를 넣기 위해 Panel을 이용해야 함
▷ 생성자
BorderLayout() : 영역사이에 간격이 없음
BorderLayout(int hgap, int vgap) : 각 영역 사이에 간격이 있는 BorderLayout을 생성함
ㄴ hgap - 각 영역의 사이에 간격을 줌(좌우), vgap(위아래)
▷ 메서드
add(String name, Component c)
add(Component c , String name)
f.setLayout(new BorderLayout(5,5)); // 컴포넌트별 위, 아래 간격 5씩
f.add(btC,"Center"); // 버튼 btC 를 센터로
f.add(btE,BorderLayout.EAST); // 버튼 btE를 오른쪽으로
▶ FlowLayout
- 컴포넌트들이 추가되는순서에 따라 왼쪽에서 오른쪽으로 이어져나가며, 공간이 부족하면 아랫줄에 추가됨
- 왼쪽 정렬, 오른쪽 정렬, 가운데 정렬
▷ 생성자
FlowLayout(int align, int hgap, int vgap)
ㄴ align : 컴포넌트들의 정렬방법 ex ) FlowLayout.LEFT, FlowLayout.CENTER, FlowLayout.RIGHT
FlowLayout(int align) : hgap, vgap 이 5 픽셀인 FlowLayout을 생성
FlowLayout() : 가운데 정렬이면서 hgap, vgap 이 5 픽셀인 FlowLayout을 생성
f.setLayout(new FlowLayout(FlowLayout.LEFT)); // FlowLayout(int align)
// 기본적으로간격이 5px씩 주어짐
▶ GridLayout
- 컨테이너를 테이블처럼 행과 열로 나누어 컴포넌트를 배치
- 여기에 추가되는 컴포넌트들은 모두 같은 크기로 나누어지며, 컨테이너의 크기를 변경하면 각 영역이
모두 같은 비율 로 커지거나 작아지는 성질을 갖고 있다.
▷ 생성자
GridLayout(int row, int col) : 영역들 간의 사이에 간격이 없는 GridLayout 을 생성
GridLayout(int row, int col, int hgap, int vgap) : 영역들 간의 사이에 간격이 없는 GridLayout 을 생성
ㄴ row - 컨테이너를 몇 개의 행으로 나눌것인지, col - 컨테이너를 몇 개의 열로 나눌것인지
f.setLayout(new GridLayout(3, 2)); // 3행 2열의 테이블을 만든다.

▶ CardLayout
- 여러 화면을 슬라이드처럼 바꿔가며 보여줄 수 있음
▷ default 레이아웃 매니저
Panel : FlowLayout
Window, Dialog, Frame : BorderLayout
※ AWT의 주요 Component
▶ Frame
- 생성자 : Frame(String title)
- 메서드 : getTitle, setTitle, setState, getState, setResizable
- Frame 의 기본 레이아웃 : BorderLayout
Frame f = new Frame("Login"); // 객체생성("String") : String title
f.setSize(300,200); // 사이즈 지정
f.setVisible(true); // 보이게
BorderLayout : Frame의 기본 레이아웃으로 컴포넌트들을 상,하,좌,우,중앙 으로 배치한다.
- add() 메소드를 사용할 경우 위치를 지정하여 부착
FlowLayout : 컴포넌트들을 왼쪽에서 오른쪽으로 차례대로 배치
GridLayout : 행열 방식으로 컴포넌트 배치
- GridLayout 생성자는 반드시 행,열을 지정해야 함
▶ Button
Frame f = new Frame("Test"); // Frame(틀) 을 만들어서
f.setSize(300, 200);
f.setLayout(null); // 레이아웃 매니저의 설정을 해제한다
Button bt = new Button("확인"); // 버튼 객체 만들고
bt.setSize(100,50); // 버튼 사이즈 설정
bt.setLocation(100,75); // / Frame내에서의 Button의 위치를 설정 , setLocation(int x, int y)
f.add(bt); // 생성된 Button을 Frame에 포함시킨다
f.setVisible(true);
• 기본적으로 설정된 레이아웃 매니저를 없애고, Button의 크기와 위치를 수동적으로 설정
• Frame의 크기를 변경해도 Button의 크기와 위치에는 전혀 변화가 없다
• 대신 Button의 크기와 위치를 수동적으로 직접 지정해주어야 함
▶ Choice
- 메서드 : add, remove, removeAll, insert, getItem, getItemCount, getSelectedIndex, getSelectedItem
Choice ch = new Choice(); // choice 객체생성해서
ch.add("java"); // 옵션넣어주기
ch.add("oracle");
ch.add("spring");
f.add(ch); // 프레임에 choice 객체 넣기

▶ List
List list = new List(4); // 4개 목록을 보여줄 수 있는 크기의 List를 만든다
list.add("java");
list.add("jsp"); // list에 값 넣기
f.add(list); // list를 frame 에 올리기
List selectMany = new List(6, true); // 다중선택
- 생성자의 두번째 인자값을 true로 설정해서 List의 목록에서 여러 개를 선택할 수 있게가능

▶ Label
- 화면에 글자를 표시, 설명이나 메시지를 화면에 나타내는데 주로 사용
▷생성자
- Label(String text, int alignment) : alignment - Label.LEFT, Label.CENTER, Label.RIGHT
- Label(String text) : 기본값인 Label.LEFT로 설정
▷메서드 : getText, setText, setAlignment
Label lb1 = new Label("ID : "); // Label 객체생성하고
TextField tfPwd = new TextField(10); // 10글자가 들어갈 수 있는 Textfield 객체생성
tfPwd.setEchoChar('*'); // 입력값 대신 * 이 보이도록 함
▶ Checkbox
- boolean과 같이 true/false 또는 on/off 와 같 이 둘 중의 한 값을 가질 수 있는 컴포넌트
- CheckboxGroup을 이용하면, 여러 가지 값들 중에서 한 가지를 선택할 수 있는 radio button도 만들 수 있음
▷ 생성자
- Checkbox(String text, boolean state) : state - true이면 선택된 상태로 생성
- Checkbox(String text) : 선택해제된 상태로 생성
- Checkbox(String text , CheckboxGroup group, boolean state) : group - CheckboxGroup 객체의 참조
- CheckboxGroup을 이용해서 radio button으로 만든다
▷ 메서드 : getLabel, setLabel, getState, setState
Label lb1 = new Label("관심분야");
Checkbox ch1 = new Checkbox("news", true); // 선택된 상태로 생성
Checkbox ch2 = new Checkbox("sports");
Label lb2 = new Label("성별");
CheckboxGroup group = new CheckboxGroup();
Checkbox ckGender1 = new Checkbox("남자",group,false);
Checkbox ckGender2 = new Checkbox("여자",group,false); // 둘다 선택 안된채로(false)생성


▶ TextField
- 사용자로부터 값을 입력받을 수 있는 컴포넌트
- 편집이 가능, 한 줄만 입력할 수 있어서 이름, id, 비밀번호 등 비교적 짧은 값의 입력에 사용됨
▷ 생성자
- TextField(String text, int col) : col - 입력받을 글자의 수
- col의 값에 따라서 TextField의 크기가 결정됨
- TextField(int col)
- TextField(String text)
- TextField()
▷ 메서드 : setEchoChar, getColumns, setText, getText, select, selectAll, getSelectedText, setEditable
TextField id = new TextField(10); //약 10개의 글자를 입력할 수 있는 TextField 생성
TextField pwd = new TextField(10);
pwd.setEchoChar('*');// 입력한 값 대신 '*'가 보이도록 한다.

▶ TextArea
- 여러 줄의 text를 입력하거나 보여줄 수 있는 편집가능한 컴포넌트
- 스크롤바를 이용해서 실제화면에 보이는 것보다 많은 양의 text를 담을 수 있음
▷ 생성자
- TextArea(String text, int row, int col, int scrollbar)
- TextArea(int row, int col) : scrollbar 는 수평, 수직 모두 갖는다
▷ 메서드
- getRows, getColumns, setRows, setColumns, append, insert, replaceRange, setText, getText, select, selectAll, getSelectedText, setEditable
TextArea comments = new TextArea("하고 싶은 말을 적으세요.", 10, 50);
f.add(comments);
comments.selectAll(); // TextArea의 text 전체가 선택 되도록 한다.
▶ Scrollbar
- 사용자가 정해진 범위 내에 있는 값을 쉽게 선 택할 수 있도록 해주는 컴포넌트
▷ 생성자
- Scrollbar(int orientation, int init, int buttonSize, int min, int max)
- orientation : Scrollbar의 종류 지정
- Scrollbar.VERTICAL, Scrollbar.HORIZONTAL
- init : Scrollbar의 초기값 buttonSize : Scroll버튼(bubble)의 크기
- min : Scrollbar가 가질 수 있는 최소값
- max : Scrollbar 가 가질 수 있는 최대값
▷ 메서드 : getValue, setValue
Scrollbar hor = new Scrollbar(Scrollbar.HORIZONTAL, 0, 50, 0, 100); //수평 스크롤
hor.setSize(100, 15);
hor.setLocation(60, 30);
Scrollbar ver = new Scrollbar(Scrollbar.VERTICAL, 50, 20, 0, 100); // 수직 스크롤
ver.setSize(15, 100);
ver.setLocation(30, 30);

▶ Panel
- Frame과 같이 다른 컴포넌트를 자신의 영역 내에 포함시킬 수 있는 컨테이너, 동시에 Panel 자신이 다른 컨테이너 에 포함될 수 있기도 하다.
- Panel은 기본적으로 FlowLayout 을 레이아웃 매니저로 사용하므로
Panel안에 포 함된 버튼의 위치와 크기는 지정해주지 않아도 됨
▷ 생성자
- public Panel()
- public Panel(LayoutManager layout)
Panel p = new Panel();
p.setBackground(Color.green); // Panel의 배경을 녹색으로 한다.
p.setSize(100, 100);
p.setLocation(50, 50);
Button ok = new Button("OK");
p.add(ok); // Button을 Panel에 포함시킨다.
f.add(p); // Panel을 Frame에 포함시킨다.

▶ ScrollPane
- ScrollPane - 컨테이너이므로 다른 컴포넌트를 포함시킬 수 있으나,
다른 컨테이너들과는 달리 단 하나의 컴포넌트 만을 포함시킬 수 있음
- 포함된 컴포넌트의 크기가 ScrollPane 자신보다 큰 경우 스크롤바를 이용해서 볼 수 있게 해줌
▷ 생성자
- ScrollPane(int scrollbarDisplayPolicy)
- ScrollPane()
ScrollPane sp = new ScrollPane();
Panel p = new Panel();
p.setBackground(Color.green); // Panel의 배경을 green으로 한다.
p.add(new Button("첫번째")); // Button을 Panel에 포함시킨다.
sp.add(p); // Panel을 ScrollPane에 포함시킨다.
f.add(sp); // ScrollPane을 Frame에 포함시킨다.

▶ Dialog
- 주로 화면에 메시지창을 보여주는데 사용됨
- 다른 컴포넌트들을 포함할수 있는 컨테이너, Frame과 유사한 모양
▷ 생성자
- Dialog(Frame parent, String title, boolean modal)
- Dialog(Frame parent, String title)
▷ 메서드 : show, hide, dispose, getTitle, setModal, setResizable
Frame f = new Frame("Parent");
f.setSize(300,200);
Dialog info = new Dialog(f,"Information", true); //parent Frame을 f로 하고, modal을 true로 해서 필수응답 Dialog로 함.
info.setSize(140,90);
info.setLocation(50,50); //parent Frame이 아닌, 화면이 위치의 기준이 된다.
info.setLayout(new FlowLayout());
Label lb = new Label("This is modal Dialog", Label.CENTER);
Button bt = new Button("OK");
info.add(lb);
info.add(bt);
f.setVisible(true);
info.setVisible(true); // Dialog를 화면에 보이게 한다.
▶ FileDialog
- 파일을 열거나 저장할 때 사용되는 Dialog
▷ 생성자
- FileDialog(Frame parent, String title, int mode)
- mode : FileDialog.LOAD, FileDialog.SAVE 중 하나
- FileDialog(Frame parent, String title)
- mode를 생략하면 디폴트로 LOAD가 사용됨
Frame f = new Frame("Parent");
f.setSize(300, 200);
FileDialog fileOpen = new FileDialog(f, "파일열기", FileDialog.LOAD);
f.setVisible(true);
fileOpen.setDirectory("E:\\java\\jdk1.6");
fileOpen.setVisible(true);
//파일을 선택한 다음, FileDialog의 열기버튼을 누르면,
// getFile()과 getDirectory()를 이용해서 파일이름과 위치한 디렉토리를 얻을 수 있다.
System.out.println(fileOpen.getDirectory() + fileOpen.getFile());

외 에도 배운거 많지만 다적는거 에바임 진짜
위 내용 설명으로 부족하다면
java 17 강 pdf 파일을 보자 !
참조 : https://coding-factory.tistory.com/261
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jydev&logNo=220731929566
'JAVA' 카테고리의 다른 글
| [JAVA] GUI / 계속 추가예정 (0) | 2022.04.11 |
|---|---|
| [JAVA] AWT.EVENT (0) | 2022.04.06 |
| [JAVA] DTO / DAO (0) | 2022.04.04 |
| [JDBC] 오라클 developer - JAVA eclipse 연동 / JDBC 프로그래밍 순서 (0) | 2022.04.01 |
| [JAVA] 형식화클래스 / Math 클래스의 메서드 / StringBuffer / StringTokenizer / 연산자 == (0) | 2022.03.15 |