본문 바로가기

자바

자바 5주차<AWT>

2021년 7월 작성글

 

AWT-자바에서 UI제공하는 패키지.

GUI를 제공하는 인터페이스 컨퍼런트의 집합(java.awt 패키지)

스윙-javax.swing 패키지에 위치. 더 좋은 GUI들이 있음.

GUI를 제공하는 것은 AWT와 SWING

이런 GUI는 안드로이드 GUI와 똑같음. 반대 상황도 성립.

 

AWT구조.

객체라는 가장 큰 틀이 있고 레이아웃이 있음. 레이아웃은 오브젝이라는 상위 레벨을 상속받게 됨. 레이아웃에 우리가 원하는 주 틀이 있음.

컴퍼런트(GUI각각을 나타내는 핵심요소)도 객체에 포함.

 

컨테이너란 뭔가 포함시킬 수 있는 것이라 기본이 됨. 윈도우, 패널, 스크롤이 있음.

윈도우 내에는 프레임, 다이얼로그, 파일 다이럴로그 가 있음. 그 중 프레임이 가장 기본적인 것이라 중요함.

디자인 시 가장 중요한 기본 틀임. 프레임 속에 모든 컨포넌트를 집어 넣을 수 있음.

컨테이너 내 패널은 컨테이너의 속성을 가지고 있는 컨포넌트임.

contain:포함한다. 화면에 포함 할 수 있는 기능.

프레임과 패널을 잘 알아두면 좋다. 무엇을 포함하는가?

-버튼 캔버스 체크박스 초이스 스크롤 바 등등

이런 식의 메뉴를 만듦.

이게 컨포넌트임!

여기서 사용되는 것은 AWT패키지.

왜 사용하느냐? 화면을 설계하려고!

 

패키지가 중요한 이유.

패키지를 만들때는 인터페이스를 만드는 것보다는 남들이 사용하게 해줘야 하는 것.

 

 

AWT패키지는 컴포넌트를 상속받음.

컴포넌트는 다양한 메소드를 가짐.(common메소드를 가지는 클래스)

모든 클래스가 같은 기능을 가지도록 자주 쓰는 기능을 미리 짜둔 것.

setSize(int,int) setSize(Boolean) 둘이 특히 자주 쓰임.

AWT는 콘테이너를 가지고 있는데, 과연 콘테이너란?

처음 접할 수 있는 콘테이너임.

다른 컴포넌트(라벨, 버튼 등)가 add()메소드를 통해 그 내부에 들어갈 수 있게끔(nested 될 수 있게) 하는 것.

그래서 프레임은 컨테이너 역할을 하는게 중요함. 패널도 컨테이너 역할을 함.

컴포넌트 중 중요 메서드는

add(PopupMenu), getSize(), setBackground(Color), setEnabled(Boolean), setFont(Font), setForeground(Color), setLocation(int, int), setSize(int, int), setVisible(Boolean)이 있음.

 

GUI컴포넌트들은

Frame, Label, Button, Checkbox / CheckboxGroup, Choice, List, Text Components(TextField, TextArea), Panel, ScrollPane, PopupMenu 들이 있다.

 

패널을 왜 써야 하는가? 패널의 장점?

패널은 눈에 안보임. 그래서 라벨과 텍스트필드를 하나의 세트로 묶을 때 유용하게 사용함. 윤곽선 없는 형태! 어떤 컴포넌트들을 모으고 싶을 때 잘 사용됨.

 

컨테이너 중 하나인 프레임.

자바 응용을 위한 메인 컴포넌트임.

타이틀이 있고 레이아웃(틀)이 있음. 보더레이아웃이 기본 값.

Frame()이라는 기본생성자

Frame(String title)이라는 제목을 준 생성자

사이즈 지정을 위한 setSize(int width, int height) 단위는 픽셀 단위임.

화면에 보일지 말지를 위한 setVisible(true)가 있음.

setTitle(String)은 프레임의 이름을 지정해줌.

 

라벨.

한줄의 텍스트를 나타낼 때 사용함.

 

생성자가 아무것도 없는 Label()

텍스트가 들어가는 Label(String text)

위치도 정할 수 있는 Label(String text, int alignment) 이 있음

alignment의 종류. Label.LEFT, Label.RIGHT, Label.CENTER

라벨이라는 클래스가 가진 메소드 들도 있음.

getAligment(), getText(), setAlignment(int alignment), setText (String text)

 

버튼

마우스 클릭을 통해서 액션 처리가 됨.

어떤 액션을 제공한다는 것이 중요함. 왜? 이벤트와 연결되는 부분이니까! 버튼 누르면 무언가 동작이 되어야 한다. = 이벤트가 발생한다. ECA RULES가 적용됨.

버튼을 누르면 실행이 될 함수가 불러진다. 이벤트가 들어오면 컨디션에 따라서 함수가 실행이 됨. 이벤트 드리블 방식-객체지향프로그램의 동작. 이것이 이루어질 때 메서드 인보케이션도 저절로 이루어짐. addActionListener() 메서드는 이벤트 실행 시켜주는 설정을 함. (클릭-eca-action method 실행. 이게 바로 자바의 이벤트 처리 방식. 다 컴퍼런트에 기초함. 화면에서 동작되는 것을 보여주기 때문에.)

그 외 메서드는 getLabel(), setLabel(), getActionCommand(), setActionCommend()가 있음.

 

코드와 메인을 항상 분리하자!

상속을 받아서 super를 쓰는게 좋은지, 직접 Frame을 불러 쓰는게 좋은지는 스타일의 차이임.

상속을 받고서도 new Frame을 해서 사용할 수도 있긴 함. 번거롭지만..

상속받은 것도 단점이 있음. 객체지향은 단일 상속이라서 Frame등을 상속받아버리면 다른 상속을 못 받음. 다른 상속을 안 받을때만 사용하는게 좋음.

그리고 add메소드가 어디에 add인지 헷갈릴 수 있기 때문에 조심해서 사용하기. 헷갈리면 그냥 f. 붙이는 것도 방법.

 

변수도 Button ok; 이런 식으로 위에 미리 선언해 두는게 좋음.

왜냐? 클래스 바로 밑에 미리 선언해두면 이 클래스 내에 글로벌 변수가 됨. 클래스 내 모든 함수가 접근(및 사용)이 가능해짐!

왜 이것이 중요하냐? 나중에는 메서드들이 많이 들어가게 됨. 특히 버튼에는 액션이 많이 들어가게 되는데 미리 생성해두면 이 객체가 뒤 코드에도 사용할 수 있기 때문에 가능한 생성하는 객체들의 변수는 위에 빼내서 코드를 짜는게 좋음. 매번 그 함수를 선언할 필요가 없음. Button b = new ~~를 b = new ~~로 생략 가능.

 

체크박스

체크박스 그룹. 체크박스나 라디오버튼을 여러 개 가져올 때 사용함.

생성할 구조로 Checkbox(), Checkbox(String), Checkbox(String, Boolean), Checkbox(String, CheckboxGroup, Boolean)이 있음.

addItemListener()라는 메소드가 중요함. 이벤트가 열리는 메소드.

그 외 메인 메서드는 getStatus (), setStatus (), getLabel (), setLable(), getSelectedCheckbox() 가 있음.

 

라디오버튼은 버튼 중에 하나만 클릭 가능.

체크박스는 복수 클릭 가능.

 

초이스

여러가지 선택지를 드롭다운 형식으로 지정하는 것.

addItemListener() 메소드가 마찬가지로 중요함. 이벤트를 받아야 하니까.

 

이벤트를 배워야 함. 지금까지는 화면 설계만 배운 셈.

프레임을 만들고 선택을 했을 때 발생하는 임플리먼트 메소드를 짤 줄 알아야 함.

그 외의 주요 메서드는 •

add(String item), remove(int position), remove(String item), getItem (int), getItemCount(), getSelectedIndex() , getSlectedItem(), select(int position), select(String item) 등이 있음.

 

리스트

초이스랑 비슷한데 여러 아이템을 선택 할 수 있는게 다름. 초이스는 하나만!

List(int rows)로 몇 줄 받을지,

List(int rows, Boolean) 생성자로 여러 개 입력을 받을지 말지 설정 가능.

addActionListner()와 addItemListener()로 이벤트를 받을 수 있음.

add(String item), removeAll(), remove(int position), remove(String item), getItem (int index), getItemCount(), getSelectedIndex() , getSlectedItem(), select(int position), select(String item)

 

텍스트컴포넌트

getSelectedText() , getText(), setText (String) 등의 메서드 사용 가능.

 

텍스트 필드 : 한 줄 입력 가능.

TextField(), TextField (int columns), TextField (String), TextField (String text, int columns) 등의 생성자 사용 가능.

-setEchoChar(char) 패스워드 입력 등 입력값을 비밀번호 처리하는 메소드.

getSelectedText(), getText(), setEditable(Boolean), setText(String)등의 주요 메서드가 있고

addActionListener()로 이벤트를 받음.

 

텍스트에어리아

여러 줄 입력 가능.

TextArea(), TextArea(int rows, int columns), TextArea (String text), TextArea(String text, int rows, int columns) 로 생성하고 addActionListener()메서드로 이벤트를 받음.

기타 주요 메서드로는 append(String), insert(String, int position), replaceRange (String, int start, int end), getSelectedText() , getText(), select(int start, int end), setEditable (Boolean), setText (String) 이 있음.