* 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이라는 클래스의 객체를 생성해서 사용.
예제01) AWT를 이용한 Frame 생성
- Frame이라는 클래스를 상속을 받아서 생성자를 통해 화면에 Frame을 보여주는 방법
package sist;
import java.awt.Frame;
public class Ex01_Frame extends Frame {
public Ex01_Frame() {
// 프레임에 제목을 설정하는 메소드
// 프레임의 상단 쪽에 제목이 나타날 것
super("첫번째 예제");
// 프레임의 위치를 설정하는 메소드
// setLocation(x, y)
setLocation(200, 200);
// 프레임의 크기를 설정하는 메소드
// setSize(가로 픽셀수, 세로 픽셀수)
setSize(300, 300);
// 프레임을 화면에 보여주는 메소드
setVisible(true);
}
public static void main(String[] args) {
// 생성자 호출
new Ex01_Frame();
}
}
- Frame이라는 클래스의 객체를 생성해서 사용.
/*
Frame을 만드는 방법 - 두번째
- Frame 이라는 클래스의 객체를 생성해서 사용
*/
package sist;
import java.awt.Frame;
public class Ex02_Frame {
public static void main(String[] args) {
// Frame 이라는 클래스의 객체 생성
Frame frame = new Frame("두번째 예제");
// frame.setTitle("두번째 예제");
// 라고 해도 된다.
// 프레임 위치 설정
// frame.setLocation(200, 200);
// 프레임 크기 설정
// frame.setSize(200, 300);
// 프레임의 위치 + 크기 지정
// 순서대로 x축, y축 위치, 가로 픽셀, 세로 픽셀 기입
frame.setBounds(200, 200, 200, 300);
// 프레임을 화면에 보여주기
frame.setVisible(true);
}
}
두 가지 방법 모두 같은 결과가 나타난다.
AWT로 만든 프레임은 X를 눌러도 창이 꺼지지 않으며, Console창에서 중단(빨간버튼)을 눌러야만 창이 꺼진다.
예제02) Swing을 이용한 Frame 만들기
- JFrame이라는 클래스를 상속을 받아서 생성자를 통해 화면에 Frame을 보여주는 방법
/*
JFrame이라는 클래스를 상속을 받아서 생성자를 통해 화면에 Frame을 보여주는 방법
*/
package sist;
import javax.swing.JFrame;
public class Ex03_JFrame extends JFrame{
public Ex03_JFrame() { // 기본 생성자
// 프레임 이름 지정
setTitle("세번째 예제");
// 프레임 위치 설정
setBounds(200, 200, 300, 300);
// 프레임 보이기
setVisible(true);
}
public static void main(String[] args) {
// 생성자 호출
new Ex03_JFrame();
}
}
- JFrame이라는 클래스의 객체를 생성해서 사용하는 방법
/*
JFrame이라는 클래스의 객체를 생성해서 사용.
*/
package sist;
import javax.swing.JFrame;
public class Ex04_JFrame {
public static void main(String[] args) {
JFrame jframe = new JFrame("네번째 예제");
jframe.setBounds(800, 600, 300, 300);
jframe.setVisible(true);
}
}
마찬가지로 위 코드대로만 생성하면 X 버튼을 눌러도 창이 꺼지지 않고 콘솔창의 Terminate를 눌러야만 꺼진다.
// 프레임 x 버튼 유효화
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
이 코드를 쓰면 X버튼이 유효화 된다.
예제03) Frame에 Button을 추가하기
package sist;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
//JButton : 스윙에서 제공하는 버튼
public class Ex06_JButton extends JFrame {
public Ex06_JButton() { // 기본생성자
setTitle("JButton 예제");
// 컨테이너 만들기
JPanel container = new JPanel();
// 1. 컴포넌트를 만들자
JButton button1 = new JButton("버튼 1");
JButton button2 = new JButton("버튼 2");
JButton button3 = new JButton("버튼 3");
// 2. 컴포넌트를 컨테이너에 올리기
container.add(button1);
container.add(button2);
container.add(button3);
// 3. 컨테이너를 프레임에 올리기
add(container);
// 위치, 크기 지정
setBounds(200, 200, 300, 300);
// 보이기
setVisible(true);
}
public static void main(String[] args) {
new Ex06_JButton();
}
}
예제04) Frame에 CheckBox 추가하기
package sist;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Ex07_JCheckBox extends JFrame {
// 다중선택이 가능한 체크박스 생성
public Ex07_JCheckBox() { // 기본 생성자
// 프레임 이름 지정
setTitle("JCheckBox 예제");
// 컨테이너를 만들자
JPanel container = new JPanel();
// 1. 컴포넌트를 만들어 보자
JCheckBox jcb1 = new JCheckBox("볼링");
JCheckBox jcb2 = new JCheckBox("독서", true); // 독서 체크박스가 체크된 채로 나타남
JCheckBox jcb3 = new JCheckBox("영화감상");
JCheckBox jcb4 = new JCheckBox("윤동");
JCheckBox jcb5 = new JCheckBox("수면");
// 2. 컨테이너에 컴포넌트 올리기
container.add(jcb1); container.add(jcb2);
container.add(jcb3); container.add(jcb4);
container.add(jcb5);
// 3. 프레임에 컨테이너 올리기
add(container);
// 4. 프레임 위치, 크기 지정
setBounds(200, 200, 300, 300);
// 5. 프레임 보이기
setVisible(true);
}
public static void main(String[] args) {
new Ex07_JCheckBox(); // 생성자 호출
}
}
예제05) ImageIcon을 이용한 CheckBox 만들기
먼저, 같은 프로젝트 안에 이미지 파일이 있어야한다.
package sist;
import javax.swing.*; // 이렇게 하면 코드도 줄이고, 필요한 모든 클래스를 import함
//import javax.swing.ImageIcon;
//import javax.swing.JCheckBoxMenuItem;
//import javax.swing.JFrame;
//import javax.swing.JPanel;
// 이미지가 들어간 체크박스를 만들어 보자
public class Ex08_JCheckBox_with_Image extends JFrame {
public Ex08_JCheckBox_with_Image() { // 기본 생성자
// 프레임 이름
setTitle("과일 체크박스 예제");
// 컨테이너를 만들자
JPanel container = new JPanel();
// 1-1. 과일 이미지 아이콘을 만들어 보자
ImageIcon kiwi = new ImageIcon("images/kiwi.jpg");
ImageIcon mango = new ImageIcon("images/mango.jpg");
ImageIcon apple = new ImageIcon("images/사과.jpg"); // 파일명이 한글이어도 읽힐까?
// 1-2. 컴포넌트 만들기
JCheckBoxMenuItem jcb1 =
new JCheckBoxMenuItem("키위", kiwi);
JCheckBoxMenuItem jcb2 =
new JCheckBoxMenuItem("망고", mango);
JCheckBoxMenuItem jcb3 =
new JCheckBoxMenuItem("사과", apple);
// 2. 컨테이너에 컴포넌트 올리기
container.add(jcb1);
container.add(jcb2);
container.add(jcb3);
// 3. 프레임에 컨테이너 올리기
add(container);
// 4. 프레임 위치, 크기 지정
// 프레임 크기는 고정된 게 아니기 때문에 사용자가 임의로 변경할 수 있다
setBounds(200, 200, 300, 600);
// 프레임의 크기를 고정시키는 메소드
// setResizable() 괄호 안 값이 true로 되어있음(default)
setResizable(false);
// 프레임의 x버튼 클릭 시 종료시키는 메소드
// setDefaultCloseOperation(오퍼레이션명.EXIT_ON_CLOSE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 5. 프레임 보이기
setVisible(true);
}
public static void main(String[] args) {
new Ex08_JCheckBox_with_Image(); // 생성자 호출
}
}
예제06) Frame에 RadioButton 추가하기
package sist;
import javax.swing.*;
public class Ex09_JRadioButton extends JFrame{
// 하나의 선택만 할 수 있는 라디오 버튼을 만들어보자
public Ex09_JRadioButton() { // 기본 생성자
// 프레임 이름 지정
setTitle("JRadioButton 예제");
JPanel container = new JPanel();
// 1. 컴포넌트를 만들자
JRadioButton jrb1 = new JRadioButton("게임");
JRadioButton jrb2 = new JRadioButton("여행");
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. 컨테이너에 컴포넌트 올리기
container.add(jrb1);
container.add(jrb2);
container.add(jrb3);
container.add(jrb4);
// 3. 프레임에 컨테이너 올리기
add(container);
// 4. 프레임 위치, 사이즈 지정
setBounds(200, 200, 300, 300);
// 프레임의 x버튼 클릭 시 종료시키자
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 5. 프레임 보이기
setVisible(true);
}
public static void main(String[] args) {
new Ex09_JRadioButton(); // 생성자 호출
}
}
예제07) Frame에 ToggleButton 추가
ToggleButton 이란? 한 번 누르면 선택이 되고, 다시 누르면 선택이 해제되는 버튼
package sist;
import javax.swing.*;
// 토글버튼은 한번 클릭하면 선택되고, 한번 더 선택되면 선택 해제되는 것
public class Ex10_JToggleButton extends JFrame {
public Ex10_JToggleButton() {
// 프레임 이름 지정
setTitle("JToggleButton 예제");
// 컨테이너를 만들자
JPanel container = new JPanel();
// 컴포넌트를 만들자
// 토글버튼 생성
JToggleButton jtb1 = new JToggleButton("토글버튼1");
JToggleButton jtb2 = new JToggleButton("토글버튼2");
JToggleButton jtb3 = new JToggleButton("토글버튼3");
// 컨테이너에 컴포넌트를 올리자
container.add(jtb1);container.add(jtb2);container.add(jtb3);
// 컴포넌트를 프레임에 올리자
add(container);
// 프레임 위치, 크기 지정
setBounds(200,200,300,300);
// 프레임 X 버튼 유효화
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 프레임 보이기
setVisible(true);
}
public static void main(String[] args) {
new Ex10_JToggleButton(); // 생성자 호출
}
}
'Back-End > Java' 카테고리의 다른 글
[Java] Swing - Layout(배치관리자) (0) | 2021.09.29 |
---|---|
[Java] Swing - JComboBox, JList, JLable, JTextField, JTable, JTabbedPane, JMenu, ETC (0) | 2021.09.29 |
[JAVA] 시스템과 파일 입출력(Java.io) - Input, Output, Stream, Reader, Writer, File (0) | 2021.09.17 |
[JAVA] 컬렉션 프레임워크(Collection Framework) - Map (0) | 2021.09.17 |
[JAVA] 컬렉션 프레임워크(Collection Framework) - Set (0) | 2021.09.17 |
댓글