JAVA

[JAVA] AWT

sian han 2022. 4. 5. 20:26

※ 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