- Java.awt 패키지의 component
- TextField : 한 줄의 텍스트를 입력받는 클래스
- 1)생성자
- TextField()
- TextField(int columns) - columns:열
- TextField(String text)
- TextField(String text, int columns)
- 주요 메소드
- void setEchoChar(char c) : 화면에 보여지는 글자를 설정
- string getText() :입력된 문자열 가져오기
- void setText(String str) : str로 텍스트 필드 내용 채우기
- TextArea : 여러 줄 입력을 받을 수 있는 component
- 1) Constructor
- 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) : 텍스트와 행 수 및 열 수를 지정하고 스크롤 바 표시 여부를 설정. 스크롤 바는 정수이지만 TextArea의 상수(Field Summary)로 설정해야 합니다.
- 2) 주요 메소드
- void append(String str)
- String setText()
- void setText(String str)
- ScrollBar : 범위 내의 값을 입력받기 위한 Component
- ScrollPane : 출력 영역 보다 더 큰 컴포넌트를 출력하기 위한 Container
- 출력 영역 보다 더 큰 컴포넌트를 Panel 이나 Frame에 바로 배치하면 출력 영역 이외의 영역은 잘려서, 잘려진 영역이 출력됩니다. 이런 경우에는 Scroll 에 컴포넌트를 배치 한 후, 출력해야 스크롤 바가 만들어져서 나머지 영역도 볼 수 있습니다.
- Canvas : 별도의 출력 영역을 만드는 것으로, 이미지나 그림을 그리고자 할 때 사용
- Menu :
- MenuBar, Menu, MenuItem, CheckboxMenuItem으로 구분
- MenuBar는 Frame에 배치하고
- Menu를 MenuBar나 Menu에 배치하고 MenuItem은 Menu에 배치
- PopupMenu는 마우스 오른쪽 버튼을 눌렀을 때 보여지는 메뉴.
- FileDialog
- 파일 열기와 저장을 위한 대화상자
- 자주 사용하기 때문에 API에서 제공합니다.
- 배치 관리자 - Layout
- FlowLayout
- panel의 기본 레이아웃으로 수평으로 순서대로 배치하고 옆으로 더 이상 배치할 수 없으면 아래에 배치하는 방식. (화면 크기를 마우스로 변경하게 되면 배치한 컨포넌트의 위치가 변경되므로 setResizable(false);로 화면 크기를 못 바꾸게 해서 문제 해결)
- BorderLayout
- Frame의 기본 레이아웃으로 5개의 영역으로 나누어서 배치
- 각 영역에는 하나의 component만 배치가 가능
- 하나의 영역에 여러 개를 배치하고자 하면 panel을 만들어서 여러 개를 배치 한 후 다시 배치하면 됩니다.
- 각 영역의 이름은 Center, North, South, West, East 입니다. (대소문자 구분)
- 영역에 컴포넌트를 배치할 때 add("영역이름", 컴포넌트)의 형태이며 영역이름을 생략하면 Center에 배치됩니다.
- 컴포넌트가 배치되지 않은 영역은 Center에 포함됩니다.
container에 component 들을 어떤 식으로 배치할 것인지를 설정하는 것.
frame이나 panel의 setLayout 메소드를 이용해서 설정
panel의 경우는 생성자에 Layout 인스턴스를 대입해서 생성할 수 도 있습니다.
- GridLayout
- 표 처럼 격자를 만들어서 컴포넌트를 배치하는 레이아웃
- 모든 셀의 크기는 동일하고 하나의 셀에는 하나의 컴포넌트만 배치할 수 있습니다.
- add를 호출하면 순서대로 배치가 됩니다.
- add개수 보다 셀이 부족하면 행과 열의 수를 알아서 조정합니다.
- 생성자에 행과 열의 수를 대입할 수 있고 셀의 가로와 세로 여백을 설정할 수 있습니다.
- Null
- 레이아웃을 설정하지 않는 것으로 컴포넌트의 크기와 위치를 개발자가 직접 설정해야 하는 레이아웃
- 권장하지는 않지만 컴포넌트를 움직이거나 크기 조절을 하고자 하는 경우에 사용합니다. (커포넌트의 크기와 좌표 설정이 마음대로 가능하기 때문에 출력하는 것을 움직이게 할 수 있습니다)
java.awt의 이벤트 처리
- swing, android가 동일한 방식으로 처리
- event : 사용자 또는 프로그램에 의해 발생하는 사건
- Listener : 이벤트를 처리해 줄 수 있는 인스턴스
- EventHandler : 이벤트가 발생했을 때 호출되는 함수 또는 인스턴스
- awt는 이벤트가 발생하면 jvm에게 이벤트가 전달되고 jvm은 이 이벤트 객체를 가지고 등록된 리스너를 찾아서 이벤트 핸들러를 호출합니다.
- 이벤트 리스너 등록
- 컴포너트.add이벤트리스너(이벤트 리스너 인스턴스);
- 1.ActionListener 인터페이스
- 버튼을 클릭하거나 메뉴 또는 리스트를 선택하거나 텍스트 필드에서 Enter를 눌렀을 때 발생하는 이벤트를 처리하기 위한 인터페이스.
- 2.Evnet Routing
- 여러 컴포넌트의 이벤트를 하나의 리스너가 처리하도록 만드는 것.
- 이것이 가능한 이유는 이벤트를 처리하는 메소드의 매개변수가 이벤트가 발생한 객체의 주소를 가지고 있기 때문입니다.
- 이벤트 객체의 getSource()를 호출하면 이벤트가 발생한 객체의 주소를 알 수 있습니다.
- ActionEvent의 경우 getActionCommand()를 호출하면 이벤트가 발생한 객체의 문자열을 리턴해줍니다.
- 버튼의 경우는 버튼이 작성된 타이틀을 메뉴의 경우는 메뉴에 보여지는 문자열을 리턴합니다.
- 3. ItemListener
- CheckBox 나 Radio Button을 선택했을 때 그리고 ComboBox에서 항목을 선택했을 때 발생하는 이벤트를 처리하기 위한 리스너
- ItemEvent 클래스의 인스턴스가 이벤트에 대한 정보를 가지고 있습니다.
- 선택하면 보여지는 항목이 다르게.
- 불필요한 선택지는 없앨 때 쓰임
- 체크박스를 선택 하면
- 선택한 체크박스의 문자열과 상태를 텍스트 영역에 출력하고
- 카테고리 콤보박스를 선택하면
- 카테고리 내의 항목을 세부내용 콤보박스에 출력하고
- 버튼을 누르면
- 선택한 콤보박스의 항목을 텍스트 영역에 출력하기
1. 윈도우를 만들어서 출력하기
->윈도우 클래스 만들기:프레임으로부터 상속받는 클래스를 생성
package awt_event2;
import java.awt.Frame;
public class ItemListener extends Frame {
public ItemListener() {
setBounds(100, 100, 400, 400);
setTitle("이벤트 핸들링");
setVisible(true);
}
}
->메인 메소드에서 앞에서 만든 클래스의 인스턴스를 생성
package awt_event2;
public class Main {
public static void main(String[] args) {
new ItemListener();
}
}
2. 윈도우에 컴퍼너트들을 배치
->생성자 메소드의 setVisible 메소드 호출 전에 추가
// 체크박스
//패널 생성
Panel pn = new Panel();
//체크박스 생성
Checkbox ckboolean = new Checkbox("boolean");
Checkbox ckbyte = new Checkbox("byte");
Checkbox ckshort = new Checkbox("short");
Checkbox ckchar = new Checkbox("char");
Checkbox ckint = new Checkbox("int");
Checkbox cklong = new Checkbox("long");
Checkbox ckfloat = new Checkbox("float");
Checkbox ckdouble = new Checkbox("double");
//패널에 체크박스 얹기
pn.add(ckboolean);
pn.add(ckbyte);
pn.add(ckshort);
pn.add(ckchar);
pn.add(ckint);
pn.add(cklong);
pn.add(ckfloat);
pn.add(ckdouble);
// 패널 북쪽에 위치
add("North", pn);
// 중앙 부, TextArea 배치
TextArea ta = new TextArea(10, 70);
add("Center", ta);
// 하단 부 콤보박스 2개 배치
// 콤보박스에 배치할 데이터 만들기
String [] category = {
"Programing", "Database",
"IDE", "Framework"
};
// 카테고리 개수가 4개이면 {}가 4개
String [][] content = {
{"Java", "JavaScript", "swift"},
{"Oracle","MySQL","MongoDB"},
{"Eclipse","Android Studio","XCode"},
{"Spring","MyBatis","Hibernate"}
};
// 초이스
Choice cbcategory = new Choice();
for(String imsi : category) {
cbcategory.add(imsi);
}
Choice cbcontent = new Choice();
for(String imsi : content[0]) {
cbcontent.add(imsi);
}
Button bt1 = new Button("선택");
Button bt2 = new Button("종료");
// 패널에 버튼 넣기
// 패널에 초이스 넣기
Panel southPanel = new Panel();
southPanel.add(cbcategory);
southPanel.add(cbcontent);
southPanel.add(bt1);
southPanel.add(bt2);
add("South", southPanel);
3. 이벤트를 처리
->setVisible 호출 전에 추가
//체크 박스를 눌렀을 때 호출될 메소드
ItemListener itemHandler1 =
new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
//이벤트가 발생한 인스턴스를 원래의 자료형인
//Checkbox로 변환
//이벤트 처리 메소드에서
//e.getSource()는 이벤트가 발생한
//인스턴스의 주소를 리턴합니다.
Checkbox cb =
(Checkbox)(e.getSource());
//체크 박스에 입력된 텍스트 가져오기
String label = cb.getLabel();
//체크 박스 선택 여부 가져오기
boolean b = cb.getState();
ta.append(label + " " + b + "로 변경\n");
}
};
//체크박스를 눌렀을 때 호출될 인스턴스 설정
cnboolean.addItemListener(itemHandler1);
cnbyte.addItemListener(itemHandler1);
cnshort.addItemListener(itemHandler1);
cnchar.addItemListener(itemHandler1);
cnint.addItemListener(itemHandler1);
cnlong.addItemListener(itemHandler1);
cnfloat.addItemListener(itemHandler1);
cndouble.addItemListener(itemHandler1);
//카테고리 콤보 박스의 선택이 변경되었을 때
//호출될 메소드를 가진 Listener
//ItemListener가 처리
ItemListener itemHandler2 =
new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
//cbcategory의 선택된 행 번호 가져오기
int row = cbcategory.getSelectedIndex();
//cbcontent의 내용을 전부 삭제
cbcontent.removeAll();
//행번호에 해당하는 세부 내용을 cbcontent에 추가
for(String temp : content[row]) {
cbcontent.add(temp);
}
}
};
cbcategory.addItemListener(itemHandler2);
ActionListener action1 =
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int caNum = cbcategory.getSelectedIndex();
int coNum = cbcontent.getSelectedIndex();
String categoryText = category[caNum];
String contentText = content[caNum][coNum];
ta.setText(categoryText + ":" + contentText);
}
};
btnSelect.addActionListener(action1);
//종료 버튼을 누르면 프로그램을 종료
//System.exit(0)
ActionListener action2 =
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
};
btnExit.addActionListener(action2);
[카테고리 콤보박스의 선택이 변경되었을 때
호출될 메소드를 가진 리스너 : ItemListener]
[버튼을 눌러을 때를 처리해주는 리스너: ActionListener
1.ActionListener 인스턴스를 만들기
2.사용할 컴포넌트와 연결]
**GUI 이벤트 처리!
->이벤트를 처리하는 리스너를 찾아야 합니다.
**Java 설치
=>현재는 1.8버전을 가장 많이 사용
'JAVA 공책 > 수업 메모' 카테고리의 다른 글
Swing (0) | 2018.07.18 |
---|---|
Java, swing, Android의 view의 이벤트 처리형식 (0) | 2018.07.18 |
GUI 프로그램을 하는 방법 (0) | 2018.07.16 |
Scanner (0) | 2018.07.12 |
날짜&시간 (0) | 2018.07.12 |