* Java GUI(Graphic User Interface)
- 이미지 혹은 그래픽을 이용하여 메뉴 등을 포함하는 화면을 구성하고,
키보드와 마우스 등의 편리한 입력 도구를 이용하여 사용자가 입력하기 편하도록 만들어진 사용자 인터페이스
- java에서는 AMT와 Swing으로 어떠한 언어보다 강력한 GUI 라이브러리를 제공하여 소프트웨어 개발자들이
다양한 GUI를 쉽게 구성할 수 있도록 함.
* AWT와 Swing
- 자바 언어는 GUI 프로그램을 쉽게 작성할 수 있도록 다양한 GUI 컴포넌트들을 제공.
자바 GUI 컴포넌트는 AWT 컴포넌트와 Swing 컴포넌트로 구분이 됨.
1. AWT 컴포넌트
- java.awt 패키지를 통하여 공급이 됨
- 운영체제의 도움을 받아 화면에 출력되기 때문에 자원을 많이 소모하여 운영체제의 부담이 큼.
- 운영체제마다 컴포넌트의 모양이 다르게 나타남.
2. Swing 컴포넌트
- javax.swing 패키지를 통하여 공급이 됨.
- AWT와 다르게 자바 언어로 작성이 되었음.
==> Sun사와 네스케이프라는 회사가 공동으로 개발함.
- 운영체제의 도움을 받지 않았음. ==> 경량 컴포넌트라고 불림.
- 운영체제와 관계 없이 항상 동일한 모양이 나타남.
- AWT에는 없는 풍부한 고급 Swing 컴포넌트들을 추가적으로 개발을 하였음.
- 다양하고 모양이 예쁜 Swing 컴포넌트를 더 많이 사용함.
==> 최근에는 거의 모든 GUI 프로그램이 Swing 기반으로 작성됨.
* GUI에서 알아두어야 할 용어 - 3가지
- 컴포넌트 : 버튼, 텍스트상자, 레이블상자, 옵션박스, 체크박스, 라디오버튼 등을 말함.
- 컨테이너 : 컴포넌트들을 담을 수 있는 클래스.
==> 컴포넌트는 반드시 컨테이너에 올려져야 화면에 보여짐.
- 프레임 : 컨테이너들을 담을 수 있는 클래스.
==> 컨테이너는 반드시 프레임에 올려져야 화면에 보여짐.
(단면으로 보았을 때)
▣ ▣ ▣ ▣ ▣ ▣ ▣ ▣ - 컴포넌트
□□□□□□□□□□□□□□□ - 컨테이너
■■■■■■■■■■■■■■■■■ - 프레임
* Frame을 만드는 방법
1. Frame이라는 클래스를 상속을 받아서 생성자를 통해 화면에 Frame을 보여주는 방법
2. Frame이라는 클래스의 객체를 생성해서 사용.
예제1) AWT를 이용한 Frame 생성
public class Ex01_Frame extends Frame {
public Ex01_Frame() {
// 프레임에 제목을 설정하는 방법
super("첫번째 예제"); // 부모의 생성자 호출
// 프레임의 위치를 설정하는 방법(화면 기준 좌상단 모서리부터 0으로 좌표가 시작한다.)
setLocation(100,100);
// 프레임의 크기를 설정하는 방법
setSize(300, 300);
// 프레임을 화면에 보여주어야 함.
// setVisible() : 프레임을 화면에 보여주는 메서드.
// setVisible(boolean형) - 기본값(false)
setVisible(true);
}
public static void main(String[] args) {
new Ex01_Frame();
}
}
public class Ex02_Frame {
public static void main(String[] args) {
Frame f = new Frame("두번째 예제");
//프레임의 위치
//f.setLocation(100, 100);
//프레임의 크기
// f.setSize(300, 300);
//프레임의 위치 + 프레임의 크기 동시 설정
f.setBounds(100, 100, 300, 300); // x좌표, y좌표, 가로, 세로
//프레임을 화면에 보여주기
f.setVisible(true);
}
}
AWT로 만든 프레임은 X를 눌러도 창이 꺼지지 않으며, Console창에서 중단(빨간버튼)을 눌러야만 창이 꺼진다.
예제2) Swing을 이용한 Frame 만들기
package sist;
import javax.swing.JFrame;
public class Ex03_JFrame extends JFrame{
public Ex03_JFrame() {
setTitle("세번째 예제");
setBounds(100, 100, 300, 300);
setVisible(true);
}
public static void main(String[] args) {
new Ex03_JFrame();
}
}
예제3) Frame에 Button을 추가하기
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Ex04_JButton extends JFrame{
public Ex04_JButton() {
// 프레임을 만들어 보자.
JFrame frame = new JFrame();
// 컨테이너를 만들어 보자
JPanel jp = new JPanel();
// 1. 컴포넌트를 만들어 보자.
JButton jb1 = new JButton("버튼1");
JButton jb2 = new JButton("버튼2");
JButton jb3 = new JButton("버튼3");
// 2. 컴포넌트를 컨테이너에 올려야 한다.
jp.add(jb1);
jp.add(jb2);
jp.add(jb3);
// 3. 컨테이너를 프레임에 올려야 한다.
frame.add(jp);
// add(jp);
frame.setTitle("세번째 예제");
frame.setBounds(100, 100, 300, 300);
frame.setVisible(true);
}
public static void main(String[] args) {
new Ex04_JButton();
}
}
예제4) Frame에 CheckBox 추가하기
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Ex05_JCheckBox {
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setTitle("JCheckBox 예제");
// 컨테이너를 만들자
JPanel jp = new JPanel();
// 1. 컴포넌트를 만들자.
JCheckBox jcb1 = new JCheckBox("게임");
JCheckBox jcb2 = new JCheckBox("독서");
JCheckBox jcb3 = new JCheckBox("영화감상", true); //체크된 상태로 나옴
JCheckBox jcb4 = new JCheckBox("운동");
JCheckBox jcb5 = new JCheckBox("잠자기");
// 2. 컴포넌트를 컨테이너에 올리자.
jp.add(jcb1);
jp.add(jcb2);
jp.add(jcb3);
jp.add(jcb4);
jp.add(jcb5);
// 3. 컨테이너를 프레임에 올려야 한다.
jf.add(jp);
jf.setBounds(100, 100, 300, 300);
jf.setVisible(true);
}
}
예제5) ImageIcon을 이용한 CheckBox 만들기
import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Ex06_JCheckBoxExam {
public static void main(String[] args) {
JFrame jf = new JFrame();
JPanel jp = new JPanel();
jf.setTitle("과일 체크박스 예제");
// 1-1. 과일 이미지 아이콘을 만들어보자.
ImageIcon kiwi = new ImageIcon("images/kiwi.jpg");
ImageIcon mango = new ImageIcon("images/mango.jpg");
ImageIcon apple = new ImageIcon("images/apple.jpg");
// 1-2. 컴포넌트를 만들어 보자.
JCheckBoxMenuItem jcb1 = new JCheckBoxMenuItem("키위", kiwi);
JCheckBoxMenuItem jcb2 = new JCheckBoxMenuItem("망고", mango);
JCheckBoxMenuItem jcb3 = new JCheckBoxMenuItem("사과", apple);
// 2. 컴포넌트를 컨테이너에 올려야 한다.
jp.add(jcb1); jp.add(jcb2); jp.add(jcb3);
// 3. 컨테이너를 프레임에 올려야 한다.
jf.add(jp);
jf.setBounds(100,100,300,600);
// 프레임의 크기를 안에 들은 컴포넌트에 따라 자동으로 맞춰주는 메서드
jf.pack();
// 프레임의 크기 조절을 off
jf.setResizable(false);
// 프레임의 x버튼 클릭 시 종료시키는 메서드
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}
예제6) Frame에 RadioButton 추가하기
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
public class Ex07_JRadioButton extends JFrame{
public Ex07_JRadioButton() {
JPanel jp = new JPanel();
setTitle("JRadioButton 예제");
// 1. 컴포넌트를 만들어 보자.
JRadioButton jrb1 = new JRadioButton("게임");
JRadioButton jrb2 = new JRadioButton("여행", true);
JRadioButton jrb3 = new JRadioButton("운동");
JRadioButton jrb4 = new JRadioButton("잠자기");
// 라디오 버튼은 반드시 ButtonGroup에 올려져야 한다. 안 그러면 전부 선택이 됨.
ButtonGroup bg = new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2);
bg.add(jrb3);
bg.add(jrb4);
// 2. 컴포넌트를 컨테이너에 올려야 한다.
jp.add(jrb1);
jp.add(jrb2);
jp.add(jrb3);
jp.add(jrb4);
// 3. 컨테이너를 프레임에 올려야 한다.
add(jp);
setBounds(100,100,300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex07_JRadioButton();
}
}
예제7) Frame에 ToggleButton 추가하기.
ToggleButton 이란? 한 번 누르면 선택이 되고, 다시 누르면 선택이 해제되는 버튼이다.
import javax.swing.*;
public class Ex08_JToggleButton extends JFrame{
public Ex08_JToggleButton() {
JPanel jp = new JPanel();
// 1. 컴포넌트를 만들어 보자.
JToggleButton jtb1 = new JToggleButton("토글버튼1");
JToggleButton jtb2 = new JToggleButton("토글버튼2");
JToggleButton jtb3 = new JToggleButton("토글버튼3");
// 2. 컴포넌트는 컨테이너에 올려야 한다.
jp.add(jtb1);
jp.add(jtb2);
jp.add(jtb3);
// 3. 컨테이너는 프레임에 올려져야 한다.
add(jp);
setBounds(100,100,300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex08_JToggleButton();
}
}
'Back > JAVA' 카테고리의 다른 글
Java GUI(AWT, Swing) - Layout (0) | 2021.03.22 |
---|---|
Java GUI(AWT, Swing) - JList, JLable, JTextFiel, JTable, JTabbedPane, JMenu, ETC (0) | 2021.03.22 |
시스템과 파일 입출력(Java.io) - Input, Output, Stream, Reader, Writer, File (0) | 2021.03.18 |
[심화예제]HashMap, 예외처리, JOptionPane을 사용하여 상품정보 반환하기 (0) | 2021.03.17 |
컬렉션 프레임워크(Collection Framework) - Map★★★ (0) | 2021.03.17 |