JAVA/JAVA2

[java2] #08 - GUI, awt 컨테이너와 컴포넌트

yoonddo 2022. 7. 14. 16:44

1. GUI

 - 그래픽 사용자 인터페이스(Graphical User Interface)로 사용자가 편리하게 입출력할 수 있도록

   그래픽으로 화면을 구성하고, 마우스나 키보드로 입력받을 수 있도록 지원하는 사용자 인터페이스


2. java GUI (swing,awt)

 - java GUI는 강력한 GUI컴포넌트를 제공하고 쉬운 GUI프로그래밍을 할 수 있다는 특징이 있다.

 - GUI 컴포넌트를 이용해 프로그래밍하는데, AWT(java.awt)와 Swing(javax.swing)가 있다.

 - AWT (Abstract Window Toolkit) 와 Swing이 그림을 그리는 대상은 크게 두 가지이다.

  1. 특정 한 가지 기능을 하는 '컴포넌트' (ex. 버튼, checkbox..)

  2. 그 컴포넌트들을 담는 그릇인 '컨테이너' (ex. 프레임, 패널..)

GUI 설명
AWT - AWT는 운영체제가 제공하는 자원을 이용해 컴포넌트를 생성한다
- 만들기가 쉽지만 느리고 무겁다
Swing - 컴포넌트가 자바로 작성되어 있기 때문에 어떤 플랫폼에서도 일관된 화면이 작성 가능하다.
- 만들기가 힘들지만 빠르고 가볍다.

 - awt보다 자바에서 진보적인 GUI는 swing이다. (최근엔 JavaFX가 더 좋다고 함) 사용법은 거의 동일하다.

 - MVC 패턴 (Model View Controller) : 

   Model : 데이터를 가져와 어떤 작업을 처리하거나 처리한 작업을 저장한다.

   View : 데이터를 보여주는 역할을 한다.

   Controller : 뷰와 모델 사이의 흐름을 제어한다.


3. AWT 패키지

 - import java.awt.*;로도 선언할 수 있고 패키지명이 java.awt로 시작하면 모두 AWT관련 패키지이다.


4. 컴포넌트 (Component)

 - 모든 컴포넌트의 조상은 Component 클래스이다. (*예외 : 메뉴 관련 컴포넌트)

 - Component클래스의 조상은 Object 클래스이다.

   1. 일반 컴포넌트 - (최상위조상 : Component)

        -> Button, Label, Checkbox, List, Choice, Scrollbar, Dialog(대화상자요소), Frame, TextArea/TextField,

            FileDialog(파일열기)...

   2. 메뉴 컴포넌트 - (최상위조상 : MenuComponent)

        -> MenuBar, MenuItem(Menu-popupmenu, CheckboxMenuitem)...

 

5. 컴포넌트의 주요 메소드

  • Color getBackground() : 컴포넌트의 배경색을 얻는다
  • void setBackground(Color c) : 컴포넌트의 배경색을 지정된 색으로 변경한다.
  • Cursor getCursor() : 컴포넌트에 지정된 커서를 얻는다.
  • void setCursor(Cursor c) : 컴포넌트의 커서(마우스포인터) 를 지정한다.
  • Font getFont() : 컴포넌트에 지정되어 있는 Font를 얻는다.
  • void setFont(Font f) : 컴포넌트의 Font를 지정한다.
  • Color getForeground() : 컴포넌트의 전경색을 얻는다.
  • void setForeground(Color c) : 컴포넌트의 전경색을 지정한다.
  • int getHeight() : 컴포넌트의 높이를 얻는다.
  • int getWidth() : 컴포넌트의 폭을 얻는다.
  • void setBounds(int x, int y, int witdh, int height) : 컴포넌트의 위치(x,y)와 크기(width, height)를 지정한다.
  • Rectangle getBounds() : 컴포넌트의 위치와 크기(Rectangle 객체)를 얻는다.
  • Point getLocation() : 컴포넌트의 위치를 얻는다.
  • void setLocation(int x, int y) : 컴포넌트의 위치를 지정한다.
  • Dimension getSize() : 컴포넌트의 크기를 얻는다.
  • void setSize(int width, int height) : 컴포넌트의 크기를 지정한다.
  • boolean hasFocus() : 컴포넌트가 현재 focus를 갖고 있는지 알려준다.
  • void requestFocus() : 컴포넌트가 focus를 갖도록 한다.
  • void paint(Graphics g) : 컴포넌트를 화면에 그린다.
  • void repaint() : 컴포넌트를 화면에 다시 그린다.
  • void setEnabled(boolean b) : 컴포넌트를 사용가능(true)/불가능(false)하게 한다.
  • Container getParent() : 컴포넌트가 포함되어져 있는 컨테이너(parent)를 얻는다.
  • void setVisible(boolean b) : 컴포넌트가 화면에 보이게(true)/보이지 않게(false)한다.

7. 컨테이너 (Container)

 - 컨테이너 : Component의 자손인 Container또는 Container의 자손들이며 컨테이너는 다른

   컴포넌트 또는 컨테이너를 포함할 수 있다.

 - 독립적 컨테이너 : 독립적으로 사용될 수 있고 다른 컴포넌트 또는 종속적 컨테이너를 포함할 수 있다.

 - 종속적 컨테이너 : 독립적으로 사용될 수 없고 다른 컨테이너에 포함되어야만 한다.

 

8. 컨테이너의 주요 메소드

  • 컨테이너에는 여러 개의 오버로딩된 add메소드들이 존재한다. 따라서 컨테이너에 add메서드를 사용하는 것 만으로도 다른 컴포넌트들을 포함시킬 수 있다.
  • 컨테이너에 포함된 컴포넌트들은 기본적으로 컨테이너의 설정(배경색&전경색, 폰트 등)을 따른다.
  • Component[] getComponents() : 컨테이너에 포함되어 있는 모든 컴포넌트를 얻는다.
  • Component getComponent(int n) : 컨테이너에 n번쨰로 추가된 컴포넌트를 얻는다.
  • Component getComponentAt(int x, int y) : 컨테이너의 지정 위치(x, y)에 있는 컴포넌트를 얻는다.
  • Component add(Component comp) : 컨테이너에 컴포넌트를 추가한다.
  • void remove(Component comp) : 컨테이너에서 지정된 컴포넌트를 제거한다.
  • Insets getInsets() : 컨테이너의 경계의 크기를 알 수 있는 Inset객체를 얻는다.
  • LayoutManager getLayout() : 컨테이너에 설정되어 있는 LayoutManager를 얻는다.
  • void setLayout(LayoutManager mgr) : 컨테이너에 LayoutManager를 설정한다.

▶AWT 컨테이너

Frame(프레임)
 - 응용프로그램에 윈도우를 생성하기 위해 사용하며
   기본적으로 타이틀, 최소버튼, 최대버튼, 종료버튼 지원한다.
 - 상위클래스인 Window는 타이틀, 메뉴가 지원되지 않는다.
 - 기본으로 화면에 안보이게 설정했기 때문에 반드시
   setVisible(true)값으로 설정해야 화면상에 보여짐

 - 만드는 방법은 Frame을 상속받아도 되고,
   main 메소드에서 직접 작성 가능.

주요 메소드
 static Frame[] getFrames()  애플리케이션에서 생성한 모든 프레임을 리턴 
 MenuBar getMenuBar()  프레임의 메뉴바를 리턴
 int getState()  프레임의 상태를 리턴 
 String getTitle()  타이틀 바의 문자열을 리턴 
 void remove(MenuComponent m)  프레임에서 지정한 메뉴를 제거 
 void setMenuBar(MenuBar mb)  프레임의 메뉴바를 지정 
 void setResizable(Boolean resizable)  프레임의 크기를 사용자가 변경할 수 있게 지정
 void setSize(int width, int height)  이 컴퍼넌트의 사이즈를 width 및 height로 변경 
 void setVisible(boolean b)  파라미터 b값에 응해, 이 컴퍼넌트를 표시하는지 비표시로하는지 합니다.
 void setLocation(int x, int y)  이 컴퍼넌트를 새로운 위치로 이동 
 void setBounds(intx, inty, int width, int height)  위치와 크기를 설정

 

Panel(패널)
 - 컴포넌트를 그룹별로 묶어서 처리할 때 주로 사용한다.
 - 일반적으로 Frame 컴포넌트들을 직접 붙이지 않고 Panel에
   그룹별로 붙이고 Panel을 Frame에 다시 붙인다.
생성자
 Panel()  디폴트의 레이아웃 매니저를 사용해 새로운 Panel 생성 
 Panel(LayoutManager layout)  지정된 레이아웃 매니저를 이용하여 새로운 Panel  

Dialog(다이얼로그)
 - 메안 윈도우 외에 메시질ㄹ 출력하거나 사용자로부터 자료       를 입력 받을 때 사용하는 컨테이너

 

주요 생성자
 Dialog(Dialog owner)  소유하는 Frame이 owner인 Dialog 생성 
 Dialog(Dialog owner, String title)  title을 가진 Modeless Dialog 생성 
 Dialog(Dialog owner, String title, boolean modal)  modal이 true이면 modal다이얼 로그 생성
 아니면 modeless 다이얼로그 생성 
 Dialog(Frame owner)  owner 프레임이 소유하는 Modeless 다이얼로그 생성 

▶AWT 컴포넌트

Button(버튼)
 - Button() 생성자를 사용해 버튼을 생성한다.

버튼 생성 예시
버튼을 눌렀을 때 콘솔창에 텍스트가 출력된다.

 


CheckBox(체크박스)
 - 메안 윈도우 외에 메시지를 출력하거나 사용자로부터 자료       를 입력 받을 때 사용하는 컨테이너

 CheckBox()  레이블이 없는 체크 박스 생성 
 CheckBox(String lable)  레이블을 설정한 체크 박스 생성 
 CheckBox(String label, Boolean state)  지정된 레이블과 state를 넣어서 생성
 CheckBox(String label, boolean state, CheckboxGroup group)  지정된 레이블이 붙은 체크 박스를 지정된 체크 박스 그룹에 구축해 지정된 상태로 생성
CheckboxGroup   객체를 생성해서 지정해주면 라디오 버튼이 됩니다.  

Choice(초이스)
 - List와 유사한 기능을 가지는 여러 아이템 중 하나만 선택할     수 있도록 해주는 컴포넌트
 - choice() 생성자를 사용한다.

 

주요 메소드
 void add(String item)  항목 추가 
 String getItem(int index)  선택 항목 리턴 
 int getItemCount()  항목 수를 리턴 
 int getSelectedIndex()  현재 선택된 항목의 인데스를 리턴 
 String getSelectedItem()  현재 선택된 항목의 문자열을 리턴 
 void insert(String item, int index)  항목을 지정된 위치에 삽입 
 void remove(int position)  지정된 위치의 항목을 삭제 
 void remove(String item)  item 처음 표시되는 항목을 삭제 
 void removeAll()  모든 항목 삭제
 void select(int pos)  위치를 설정 
 void select(String str)  지정된 항목으로 설정 

Label(레이블)
 - 사각형 영역에 문자열을 표시할 때 사용하는 컴포넌트
 - Label() , Label(String text) , Label(String text, int alignment)     , Label.CENTER, LEFT, RIGHT 등을 생성자로 사용한다. 
주요 메소드
 getText()  text를 리턴 
 setText(String text)  text로 레이블 설정 
 setAlignment(int align)  정렬 상태 설정 

List(리스트)
 - 여러개의 항목을 보여주고 사용자가 하나 또는 여러개의 항     목을 선택할 수 있도록 지원하는 컴포넌트이다.
 - 기본적으로 하나의 항목을 선택할 수 있지만 MultipleMode       를 설정하면 한번에 여러개의 항목을 선택할 수 있다. 
생성자
 List()  비어 있는 리스트 생성 
 List(int rows)  숫자만큼의 항목을 보여주는 리스트 생성 
 List(int rows, boolean, multipleMode)  숫자만큼의 항목을 보여주고 멀티 선택 가능 리스트 생성 
주요 메소드
 void add(String item)  item 추가 
 void add(String item, int index)  선택한 위치에 item 추가 
 void deselect(int index)  지정된 인덱스에 있는 항목을 선택 해제 
 String getItem(int index)  인덱스에 해당하는 항목을 리턴 
 int getItemCount()  항목 수를 리턴 
 String[] getItems()  리스트내의 항목을 리턴 
 int getSelectedIndexes()  선택된 항목들의 인덱스 리턴 
 String getSeleectedItem()  선택된 항목의 문자열을 리턴 
 String[] getSelectedItems()  선택된 항목들의 문자열을 리턴 
 void remove(int position)  항목 삭제 
 void remove(String item)  item 항목 삭제 
 void removeAll()  항목 전체 삭제 

TextField
 - 한 줄 내의 텍스트를 입력받거나 편집할 수 있는 컴포넌트
생성자
 TextField()  비어있는 텍스트 필드 객체 생성 
 TextField(int columns)  지정한 컬럼 수만큼 문자를 보여줄 수 있는 크기로 텍스트 필드 객체 생성 
 TextField(Strimg text)  초기 텍스트를 설정해서 생성 
 TextField(String text, int columns)  초기 텍스트를 설정하고 보여줄 수 있는 크기로 생성 
주요 메소드
 setEchoChar(char c)  보여지는 문자를 설정 
 int getCaretPosition()  텍스트 내에서 현재 마우스 포인터의 위치를 리턴 
 String getText()  텍스트 내의 표시되는 텍스트를 리턴 
 void select(int selectionStart, int selection End)  시작위치부터 마지막위치까지 선택 
 void selectAll()  텍스트 컴퍼넌트 내의 모든 텍스트를 선택 
 void setBackground(Color c)  백그라운드 칼라를 설정 
 void setCaretPosition(int position)  caret의 위치를 설정 
 void setText(String t)  표시되는 텍스트를 지정된 텍스트로 설정 

TextArea
 - 여러줄의 텍스트를 입력받거나 편집할 수 있는 컴포넌트

<상수>
- static int SCROLLBARS_BOTH: 수평과 수직 스크롤바
- static int SCROLLBARS_HORIZONTAL_ONLY : 수평 스크롤바
- static int SCROLLBARS_NONE
- static int SCROLLBARS_VERTICAL_ONLY : 수직 스크롤바

생성자
TextArea()  새로운 텍스트 영역을 생성 
 TextArea(int rows, int columns)  행수와 열수 지정 생성 
 TextArea(String text)  초기값을 설정 
 TextArea(String text, int rows, int columns)  초기값과 행수와 열수 지정 생성 
 TextArea(String text, int rows, int columns, int scrollbars)   행수와 열수를 지정하고 스크롤바 표시여부를 설정해서 생성 

Canvas
 - 특정한 모양을 갖지 않고 사각형의 영역만을 가지는 컴포넌트로
   주로 그림을 표시할 때 사용한다.

<메뉴 컴포넌트>
- MenuBar : 메뉴 표시줄을 만들 때 사용
- Menu : 메뉴 표시줄에 보이게 될 메뉴를 만들 때 사용
- MenuItem : 메뉴에 포함될 세부 메뉴를 만들 때 사용
- CheckboxMenuItem : 체크 박스가 있는 메뉴
- PopupMenu : 동적 메뉴를 만들 때 사용

<생성방법>
- MenuBar 메뉴바 객체 = new MenuBar();
- Menu 메뉴객체 = new Menu(메뉴명);
- 메누바객체.add(메누 객체);
- MenuItem 세부메뉴객체 = new MenuItem("세부 메뉴 명");
- 메뉴명.add(세부메뉴명);

 


배치 관리자
- 레이아웃에 따라 컴포넌트들을 배치하기 위한 객체
- setLayout()을 이용하고 종류로는 FlowLayout, BorderLayout, GridLayout, CardLayout등이 있다.
- FlowLayout : panel의 기본으로 컴포넌트 들을 수평으로 순서대로 나열하는 레이아웃입니다.
- 수평으로 배치하다가 더 이상 공간이 없으면 다음 줄로 이동해서 배치 합니다.


 

BorderLayout
- 5개의 영역으로 구분하여 보여준다.
- 프레임은 기본적으로 BorderLayout 이다.

BorderLayout
West North  East 
 Center
 South

 

GridLayout
- 격자 모양으로 배치한다.
- 행과 열의 수를 지정해서 배치한다.
- 행과 열 수보다 컴포넌트의 수가 많으면 자동적으로 늘어난다.


 

CardLayout
- 여러 개의 카드를 쌓은 것처럼 보여주는 레이아웃으로 한번에 하나만 보여줍니다.
- next 메소드를 이용해서 다음 화면을 출력합니다.
- Layout에 null을 설정하면 좌표와 크기를 직접 설정해서 배치합니다.