[Java] 그래픽 GUI AWT 사용법
- Language/Java
- 2018. 11. 5.
AWT란?
자바 언어가 탄생한 1995년에는 인터넷이 활성화되지 않았기 때문에 대부분의클라이언트 애플리케이션은 운영체제가 제공하는 네이티브 UI 컴포넌트를 이용하여 개발되었습니다. 그래서 Java1.0에 포함된 AWT는 운영체제가 제공하는 네이티브 UI컴포넌트를 이용하는 자바 라이브러리였죠. 그렇다보니 자바 애플리케이션이 실행되는 운영체제에 따라 UI의 모양이 서로다르고 종류도 제한적입니다. 하지만 비교적 쉽게 접할 수 있기에 콘솔에서 벗어나 Winodws개발을 하고싶은 자바개발자에게 입문코스?로 한번쯤은 해보고 넘어가는듯 합니다.
AWT 구현순서
Container : 프로그램의 창의 역할을 합니다. 한개 이상의 컨테이너위에 컴포넌트들이 올려질영역입니다. (ex Frame, Panel, Dialog 등등)
Component : 실제로 Container 위에 올려져서 화면 구성을 담당하는 요소들입니다. (ex Button, TextField, CheckBox 등등)
Event : 컴포넌트에서 구현되는 비즈니스 로직
※ 필히 Container가 제일 밑에 깔리고 그 위에 Component가 올라와야합니다.
반대로 구현하시면 컴포넌트들이 컨테이너에 가려서 안보여요.. ㅠㅠ
Container 구현
1. Frame 예제(1)
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);//생성
}
}
1. Frame 예제(2)(1)
import java.awt.*; //awt import
public class FrameEx2 extends Frame{//Ex1번과 같은데 상속해서 하는방식
public FrameEx2()
{
super("프레임테스트");
setSize(300,300);
setVisible(true);
}
public static void main(String[] args) {
FrameEx2 fr = new FrameEx2();
}
}
Component 구현
1. Button 예제
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
public class ButtonEx {
public static void main(String[] args) {
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("입력");//버튼1에 이름설정
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);//프레임 생성
}
}
2. Radio Button 예제
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Frame;
import java.awt.Panel;
public class RadioCheckboxEx {
public static void main(String[] args) {
Frame f = new Frame("라디오형 체크박스 테스트"); //프레임생성
Panel p = new Panel();//패널생성
CheckboxGroup group = new CheckboxGroup(); //체크박스그룹
Checkbox radio1 = new Checkbox("고졸",group,false); //라디오버튼 체크박스
Checkbox radio2 = new Checkbox("전문대졸",group,false);
Checkbox radio3 = new Checkbox("대졸",group,true);
p.add(radio1); //패널에 라디오버튼 붙이기
p.add(radio2);
p.add(radio3);
f.add(p); //프레임에 패널붙이기
f.setSize(300,100);//크기조절
f.setVisible(true);//프레임생성
}
}
3. TextField 예제
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextField;
public class Text_PasswordEx {
public static void main(String[] args) {
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,100); //프레임사이즈
f.setVisible(true); //생성
}
}
Event처리
1. WindowEvent 예제
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class WindowEventEx extends Frame implements WindowListener{
public WindowEventEx(){
super("windowEvent 테스트");
Label exit = new Label("프레임의 종료 버튼을 눌러주세요");
add(exit);
setBounds(300,300,200,200);
setVisible(true);
addWindowListener(this);
}
public static void main(String[] args) {
new WindowEventEx();
}
@Override
public void windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
System.exit(0); //프로그램 종료
}
@Override
public void windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub
}
}
창닫기 버튼을 클릭할 시 프로그램 종료
2. ActionEvent 예제(1)
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
/*
* Event처리 가장 많이 하는곳-게임
* 이벤트 핸들러(Event Handler)
* : 인터페이스를 오버라이딩해서 만든것
*
*/
public class ActionEventEx extends Frame implements ActionListener,WindowListener {
Panel p;
Button input, exit;
TextArea ta;
public ActionEventEx() {
super("ActionEnvet Test");
p=new Panel();
input=new Button("입력");
exit=new Button("종료");
ta=new TextArea();
input.addActionListener(this); // 리스너 연결
exit.addActionListener(this); // 리스너 연결
addWindowListener(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) {}
System.exit(0);
}
}
public static void main(String[] args) {
new ActionEventEx();
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
}
입력버튼 클릭시 버튼이 입력되었습니다라는 메시지 출력
종료버튼 클릭시 프로그램을 종료합니다 메시지 출력 후 프로그램 종료
3. ActionEvent 예제(2)
import java.awt.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.event.*;
class FAdapterEx extends Frame implements ActionListener {
Panel p1, p2, p3;
TextField tf;
TextArea ta;
Button b1, b2;
public FAdapterEx() {
super("Adapter 테스트");
p1 = new Panel();
p2 = new Panel();
p3 = new Panel();
tf = new TextField(35);
ta = new TextArea(10, 35);
b1 = new Button("Clear");
b2 = new Button("Exit");
p1.add(tf);
p2.add(ta);
p3.add(b1);
p3.add(b2);
add("North", p1);
add("Center", p2);
add("South", p3);
setBounds(300, 200, 300, 300);
setVisible(true);
b1.addActionListener(this);
b2.addActionListener(this);
tf.addKeyListener(new KeyEventHandler());
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
if (str.equals("Clear")) {
ta.setText("");
tf.setText("");
tf.requestFocus();
} else if (str.equals("Exit")) {
System.exit(0);
}
}
class KeyEventHandler extends KeyAdapter {//멤버 이너클래스
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ENTER) {
ta.append(tf.getText() + "\n");
tf.setText("");
}
}
}
}
public class AdapterEx2{
public static void main(String[] args) {
FAdapterEx.KeyEventHandler key = new FAdapterEx().new KeyEventHandler();
}
}
간단한 채팅창 구현
'Language > Java' 카테고리의 다른 글
[Java] Swing 특징 및 구조 & 사용법 총정리 (1) | 2018.11.25 |
---|---|
[Java] GUI 이벤트란 무엇인가? (0) | 2018.11.14 |
[Java] 현재날짜, 현재시간을 원하는 형태로 출력하는(Format) 다양한 방법 (1) | 2018.10.26 |
[Java] ArrayList로 구현한 Memory구조(Stack,Pop) (0) | 2018.10.25 |