(GUI-컴포넌트, 윈도우 시스템-컨트롤, 파이썬-위젯
레이블,버튼이나, 텍스트 필드와 같은 GUI를 작성하는 기본빌딩 블록을 의미)
JAVA의 GUI 객체 2가지
1.AWT
2.SWING
컴포넌트
단순 컴포넌트: JButton, JLabel, JCehckBox, JChocie, JList, JMenu, JTextFeild, JScollbar, JTextArea, JCanvas 등
켄테이너 1컨포넌트: JFrame, JDialog, JApplet, JPanel, JScrollPane 등
컨테이너
최상위 컨테이너 2: JFrame, JApplet, JDialog 등
일반 컨테이너 3: JPanel, JScrollPane 등
SWING: 3가지 최상위 컨테이너
1.JFrame: 윈도우와 메뉴를 가지는 일반적인 테스크탑 애플리케이션에 적합
3.JDialog: 메뉴가 없는 대화 상자 형식의 간단한 애플리케이션에 사용
기초 컴포넌트들
1.패널: 컴포넌트들을 포함하고 있도록 설계된 컨테이너 중 하나.
레이블이나 버튼과 같은 컴포넌트들을 화면에 표시하려면 프레임에 직접 추가하지 않고 먼저 프레임에 패널을 추가 한후에 패널 위에 버튼과 같은 컴포넌트들을 추가한다. 패널을 사용하지 않고 컴포넌트들을 직접 추가할 수도 있지만 별도의 패널을 쓰는 것이 유지 보수 및 배치 관리에 유리(setQpaque() 5, setLayout() 6, add(), remove())
2.레이블: 편집이 불가능한 텍스트를 표시하기 위한 컴포넌트.
텍스트의 속성변경 가능: 폰트의 종류, 크기 생삭 등
3.텍스트 필드: 사용자가 한 줄의 텍스트를 입력할 수 있는 기본적인 텍스트 컴포넌트
사용자가 텍스트 입력을 끝내고 엔터키를 누르면 액션 이벤트가 발생한다. 만약 한 줄 이 상의 텍스트 입력이 필요하면 텍스트 영역 사용(setEditable() 7, getText() 8, setText() 9)
배치관리자
1.FLOWLAYOUT: 컴포넌트들을 왼쪽에서 오른쪽으로 배치
각 컴포넌트들은 하나의 줄에서 차례로 배치되고 더 이상 공간이 없으면 다음 줄에 배치된다. 같은 줄에서 컴포넌트들이 정렬되는 방식도 지정 가능하다. 기본 정렬 방법은 중앙이다. 다른 정렬방법을 지정할려면 FLOWLAYOUT 생성자에서 지정을 해야한다. 컨테이너의 크기가 변경되면 자동적으로 각 컴포넌트가 재배치된다.(setComponentOrientation() 10)
2.BOREDERLAYOUT: 컴포넌트들이 상하좌우중중 중 하나로 추가
프레임, 애플릿와 같은 최상위 컨테이너의 디폴트 배치 관리자이다. 영역 지정: North, South, East, West, Center 문자열이나 BorderLayout 안의 정적 필드인 상수 PAGE_START(상), PAGE_END(하), LINE_START(좌),LINE_END(우), CENTER(중앙). 영역 지정을 하지 않을 경우 마지막으로 추가되 컴포넌트만 표시된다.
3.GRIDLAYOUT: 격자 모습으로 배치
윈도우의 크기를 바꾸면 GridLayout은 컴포넌트의 크기를 변경하여 윈도우의 크기에 맞춘다
4.그 외 레이아웃 BOXLAYOUT, CARDLAYOUT, GRIDBAGLAYOUT, GRUOPLAYOUT, SPRINGLAYOUT 등
ActionEventEx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
package GUI;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ActionEventEx extends Frame implements ActionListener {
Panel p;
Button input, exit;
TextArea ta;
public ActionEventEx() {
super("ActionEvent Test");
p = new Panel();
input = new Button("입력");
exit = new Button("종료");
ta = new TextArea();
// 이벤트 소스를 리스너에 연결
input.addActionListener(this);
exit.addActionListener(this);
p.add(input);
p.add(exit);
add(p, BorderLayout.NORTH);
add(ta, BorderLayout.CENTER);
setBounds(300, 300, 300, 200);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent ae) {
String name;
name = ae.getActionCommand();
if (name.equals("입력"))
ta.append("버튼이 입력되었습니다.\n");
else {
ta.append("프로그램이 종료합니다.\n");
try {
Thread.sleep(2000);
} catch (Exception e) {
// TODO: handle exception
}
System.exit(0);
}
}
public static void main(String[] args) {
new ActionEventEx();
}
}
|
cs |
ButtonEx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
package GUI;
import java.awt.*;;
public class ButtonEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
Frame f = new Frame("버튼 테스트");
Panel p = new Panel();
Button b1 = new Button();
Button b2 = new Button("출력");
Button b3 = new Button("정렬");
Button b4 = new Button("순위");
b1.setLabel("입력");
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
f.add(p);
f.setLocation(300, 300);
f.setSize(300, 100);
f.setVisible(true);
}
}// 플로우 레이아웃 수평으로 배치 -> 배치중 자리가 없으면 다음라인으로 내려옴
|
cs |
FrameEx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package GUI;
import java.awt.Frame;
public class FrameEx1 {
public static void main(String args[]) {
Frame f = new Frame("버튼 테스트");
f.setTitle("Frame Test");
f.setSize(300, 300);
f.setVisible(true);
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
package GUI;
import java.awt.*;
import java.awt.event.*;
public class CardLayoutEx extends Frame implements WindowListener {
CardLayout card;
Panel first_panel, second_panel, third_panel;
public CardLayoutEx() {
super("CardLayout 테스트");
card = new CardLayout();
setLayout(card);
first_panel = new Panel();
first_panel.add(new Button("1"));
first_panel.add(new Button("2"));
second_panel = new Panel();
second_panel.add(new Button("3"));
second_panel.add(new Button("4"));
third_panel = new Panel();
third_panel.add(new Button("5"));
third_panel.add(new Button("6"));
addWindowListener(this);
add("1", first_panel);
add("2", second_panel);
add("3", third_panel);
}
public void rotate() {
// TODO Auto-generated method stub
for (int i = 0; i < 2; i++) {
try {
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
card.next(this);
}
}
public static void main(String[] args) {
CardLayoutEx clt = new CardLayoutEx();
clt.setBounds(200, 200, 200, 100);
clt.setVisible(true);
clt.rotate();
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package GUI;
import java.awt.*;
public abstract class TextFieldEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
Frame f = new Frame("텍스트필드 테스트");
Panel p = new Panel();
TextField tf1 = new TextField("아이디 입력", 12);
TextField tf2 = new TextField("암호입력", 10);
tf1.selectAll();
tf2.selectAll();
tf2.setEchoChar('*');
p.add(tf1);
p.add(tf2);
f.add(p);
f.setSize(300, 300);
f.setVisible(true);
}
}
|
cs |
- 다른 컴포넌트들을 내부에 넣을 수 있는 컴포넌트 [본문으로]
- 절데 다른 컨테이너 안에 포함될수 없는 컨테이너 [본문으로]
- 다른 컨테이너 안에 포함될 수 있는 컨테이너 [본문으로]
- 자바 언어로 작성된 SW 사용자가 별도로 서버에 요청하지 않아도 수행할 수 있도록 단순한 애니메이션, 시계나 달력 같은 간단한 작업 등을 웹 상에서 실현하게 해주는 응용 프로그램 [본문으로]
- 패널의 투명도 조절 [본문으로]
- 배치관리자 호출 [본문으로]
- 편집을 불가능하게 설정하면 표시전용 [본문으로]
- 텍스트 필드에서 텍스트를 가져오는 메소드 [본문으로]
- 택스트 필드에 메소드를 쓰는 메소드 [본문으로]
- 컴포넌트 배치 방향 변경 [본문으로]