1. Java의 GUI ( 그래픽 사용자 인터페이스 )
- 사용자가 편리하게 입출력 할 수 있도록 그래픽으로 화면을 구성
- 마우스, 키보드로 입력값을 받을 수 있도록 지원하는 사용자 인터페이스
자바 GUI의 특징
- 강력한 GUI 컴포넌트 제공
- 쉬운 GUI 프로그래밍
자바 GUI 프로그래밍 방법
GUI 컴포넌트 이용
- AWT 패키지와 Swing 패키지
- AWT
.java.awt package
- Swing
.java.swing package
- JavaFX
Java11에서 제거됨
GUI
|
설명
|
|
AWT
|
운영체제가 제공하는 자원을 이용해서 컴포넌트 생성
|
|
Swing
|
컴포넌트가 자바로 작성되어 있기 때문에 어떤 플랫폼에서도 일관된 화면 작성가능
|
Swing 컴포넌트 예시
- JButton
- JCheckBox
- JRadioButton
- JTextField
- JPassewordField
- JTextArea
- JComboBox
- JList
- JProgeressBar
- JTooTip
- JScrollPane
- JMenu
- JDialog
- JFrame
이 밖에도 JApplet, JTable, JTree, JEditorPane, JTextPane, JToolBar, JSplitPane, JTabbedPane 등
여러 가지의 컴포넌트가 있다.
Swing의 특징
- 스윙 GUI 컴포넌트
- 형식화 된 텍스트 입력이나 패스워드 필드 동작과 같은 복잡한 기능 제공
- 자바 2D API
- 그림이나 이미지, 애니메이션 기능을 제공
- 교체 가능한 Look-and-Feel 지원
- 데이터 전송
- 자르기, 복사, 붙이기, drag&drop 데이터 전송 기능 제공
대부분의 프로그램은 스윙 API중에서 아주 작은 부분 집합만을 사용한다.
따라서 대부분의 경우 두가지 패키지만 포함하면 된다
*javax.swing
*javax.swing.event
JFrame
- 기본적으로 타이틀, 최소화 버튼, 최대화버튼, 종료버튼 지원
- 기본적으로는 setVIsible(False) == true로 설정해줘야 보여짐
- 만드는 방법은 JFrame 객체 직접 생성 또는 JFrame 상속
- 종료 이벤트 처리의 기본값은 HIDE_ON_CLOSE ==false를 인수로 setVIsible 메서드를 호출하여 윈도우를 숨김
이것이 기본 작업이라 x를 눌러도 console로 확인하면 종료가 안되고 있는 것
- 종료 이벤트 처리는 setDefaultCloseOperation(EXIT_ON_CLOSE) 호출
JPanel
- 컴포넌트들을 그룹 별로 묶어서 처리할 때 사용하는 컨테이너
- 레이아웃을 여러개 만들어야 할 때 많이 사용됨
- Frame에 직접 붙이지 않고 Panel 이용
컨테이너와 컴포넌트
컨테이너
- 다른 컴퓨터를 포함 할 수 있는 GUI 포넌트
- 다른 컨테이너를 포함 할 수 있음
- AWT 컨테이너: Panel, Frame, Applet, Dialog, Window
. Swing 컨테이너: JPanel, JFrame, JApplet, JDialog, JWindow
컴포넌트
- 컨테이너에 포함되어야 비로소 화면에 출력될 수 있는 GUI 객체
- 다른 컴포넌트를 포함할 수 없는 순수 컴포넌트
- 모든 GUI 컴포넌트가 상속받는 클래스: java.awt.Compnent
- 스윙 컴포넌트가 상속받는 클래스: javax.swing.JComponent
간단한 GUI 만들기
GUI 작성 절차
1. 컨테이너 생성
2. 컴포넌트 추가
FrameTest.java
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class FrameTest extends JFrame {
// 생성자
public FrameTest () {
setSize(300, 300); // 크기 설정
// 프레임 종료 버튼이 눌릴 때 프레임과 함께 종료시키는 방법
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("프레임 테스트"); // title 설정
setLayout(new FlowLayout()); // 배치 관리자 설정
JButton button = new JButton("버튼 1");
// 컴포넌트 생성 및 추가
this.add(button);
setVisible(true);
}
public static void main(String[] args) {
new FrameTest();
}
}
Swing 클래스 계층구조
- Component
- 화면에 표시되어 사용자와 상호 작용하는 시각적인 객체를 나타냄
- Container
- 내부에 다른 컴포넌트를 추가할 수 있는 기능을 제공
- 이 클래스의 add()를 이용하면 컨테이너 안에 컴포넌트를 추가
- Window
- 경계선, 타이틀 바, 버튼을 가지고 있는 윈도우를 정의
- Frame
- 자바 GUI App의 기초(AWT)
- JFrame
- Frame 클래스를 스윙의 출시에 맞추어 변경
중요한 메서드
- setLocaion(x, y), setBounds(x, y, width, height), setSize(width, height) // 프레임 위치와 크기 설정
- setIconImage(IconImage) // 윈도우 시스템에 타이틀 바, 태스크 스위처에 표시할 아이콘을 알려줌
- setTitle() // 타이틀 설정
- setResizable(boolean) // 사용자가 크기를 조절할 수 있는지 설정
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ContentPaneTest extends JFrame{
public ContentPaneTest() {
setTitle("ContentPane과 JFrame 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contenPane = getContentPane();
contenPane.setBackground(Color.blue); // 배경색 설정
contenPane.setLayout(new FlowLayout()); // 컨텐트팬에 FlowLayout 배치관리자 설정
contenPane.add(new JButton("OK")); // OK 버튼
contenPane.add(new JButton("Cancel")); // Cancel 버튼
contenPane.add(new JButton("Ignoer")); // Ignore 버튼
setSize(300,150); // 화면 프레임 설정
setVisible(true); // 화면 프레임 출력
}
public static void main(String[] args) {
new ContentPaneTest();
}
}
배치관리자
- 컨테이너에 부착되는 컴포넌트들의 위치와 크기를 결정한다.
- 하나의 컨테이너에는 반드시 하나의 배치 관리자를 가진다.
- 컴포넌트가 컨테이너로 들어오는 순간에 위치와 크기를 결정한다.
- 컨테이너의 크기가 변경되면 컨테이너 내부의 모든 컴포넌트들의 위치와 크기를 재조정한다.
배치 관리자의 종류
private FlowLayout flowLayout = new FlowLayout();
//레이아웃을 설정하지 않으면 기본으로 설정되는 레이아웃
//특정한 형태없이 쭉 나열 한다.
private BorderLayout borderLayout = new BorderLayout();
// 동서남북과 가운데 센터로 나뉘어져 있는 레이아웃
private GridLayout gridLayout = new GridLayout();
//바둑판 형태로 나뉘어져 사용되는 레이아웃
//컴포넌트의 크기는 컨테이너의 크기에 자동으로 맞춰진다.
private CardLayout cardLayout = new CardLayout();
//화면의 전환을 할 때 사용 되어지는 레이아웃
GridBagLayout
GridBagLayout을 사용하여 add 하는 방식에 대한 설명
- 패널.add(붙일 컨텐츠, new GridBagConstraints(
grid x,
grid y, - 표시할 x, y좌표
gridwidth,
gridheight, - 표시할 사이즈
weight x,
weight y, - 가중치
anchor, - 기준점 (8방위 )
fill - 채우기 ( NONE, HORIZTAL, VERTICAL, BOTH )
Insets, - 주위 여백 ( 위쪽, 왼쪽, 아래쪽, 오른쪽 )
ipad x,
ipad y
));
'인턴' 카테고리의 다른 글
[인턴 OJT 10일차] 스윙 주소록 저장, 수정, 삭제 / JTree, Thread 정리 (0) | 2022.12.23 |
---|---|
[인턴 OJT 9일차] Java Swing (0) | 2022.12.23 |
[인턴 OJT 7일차] mybatis (0) | 2022.12.21 |
[인턴 OJT 6일차] File I/O , DBAddressImpl 수정 및 복습 (0) | 2022.12.20 |
[인턴 OJT 5일차] Java DB 연동 select, insert (0) | 2022.12.16 |