GUI란?
이미지 혹은 그래픽으로 화면에 입력도구를 이용하여 사용자가 편리하게 입출력할 수 있도록
만든 사용자 인터페이스
각각의 용어
- AWT: 자바가 처음 나왔을 때 함께 배포된 GUI패키지로 운영체제의 도움을 받아서 사용하기 때문에 속도는 빠르지만 운영체제에 부담을 준다. 최근에는 거의 사용하지 않는다.
- Swing: 순수 자바언어로 AWT보다 더 많은 GUI 컴포넌트를 제공한다. Swing은 AWT에 기본 원리를 바탕으로 작성되었기때문에 Swing을 사용하기 위해서는 AWT패키지가 필요하다.
- 컨테이너: 컴포넌트를 포함한 GUI 컴포넌트이다. 또한 java.awt.Container 를 상속받는다. 담을 수 있는 그릇
- 컴포넌트: 컴테이너에 포함되어야 비로소 화면에 출력될 수 있는 GUI객체이다. 음식
- 최상위 컨테이너: 다른 컨테이너에 속하지 않고 독립적으로 존재하는 컨테이너 (JFrame, JDialog,JApplet)
- 컨텐트팬: 메뉴를 제외한 모든 GUI 컴포넌트들을 부착하는 공간으로 화면에 출력하고자 하는 GUI 컴포넌트들을 컨텐트팬에 부착하여야 한다. * 컨테이너 > 컨텐트팬 > JPanel
ex) JLabel, JTextField.. : 컴포넌트, JPanel : 컨테이너
import 경로명
import java.awt.*; - 그래픽 처리를 위한 클래스들의 경로명
import java.awt.event.*; - AWT 이벤트 사용을 위한 경로명
import javax.swing.*; - 스윙 컴포넌트 클래스들의 경로명
import javax.swing.event.*; - 스윙 이벤트를 위한 경로명
스윙으로 GUI 프로그램 만들기
1. 스윙 프레임 만들기
import javax.swing.*;
스윙 프레임은 모든 스윙 컴포넌트를 담는 최상위 컨테이너이다.
프레임없이 컴포넌트를 화면에 표시할 수 없으며, 프레임이 닫히면 프레임 내의 컴포넌트들도
화면에서 사라진다.
스윙에서 프레임의 역할을 하는 클래스가 JFrame이다.
JFrame은 Frame, Menu Bar, Content Pan의 세공간으로 구성된다.
Frame: 타이틀 바, Menu Bar: 메뉴 바, Content Pan: 화면에 출력된 모든 컴포넌트들의 부착공간
프레임에 컴포넌트 붙이기
1. JFrame 상속 받기 (따로 클래스 작성)
1 public class MyFrame extends JFrame { ... }cs 2. 스윙 프레임 객체 생성하기 (메인메소드에서 사용하기 위해)
2 MyFrame frame= new MyFrame();cs 3. 생성자에 프레임의 크기와 타이틀 설정
345 setTitle("프레임 타이틀 이름");setSize(프레임 높이, 너비);setVisible(true); //프레임 출력cs
컨텐트펜에 컴포넌트 붙이기
JFrame 객체가 처음 생길 때 컨텐트펜은 자동으로 생성된다. 그리고 해당 컨텐트 펜을 알아내기 위해서
getContentPane() 메소드를 호출한다. 컨텐트펜은 Container 타입이다.
+ 메소드 모음
12 Container cp= getContentPane(); //컨텐트팬을 알아내서 cp에 저장한다.cp.add(컴포넌트) // 컨텐트펜에 컴포넌트 부착cs
setSize(너비,높이) - 프레임의 크기 설정
setTitle("이름") - 프레임 이름 설정
setVisible(true) - 프레임 출력 여부 설정
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - 프레임 윈도우를 닫으면 프로그램 종료
add(컴포넌트) - 프레임에 컴포넌트를 추가
setLocation(x,y) - 프레임의 위치 지정
setLocationRelativeTo(null) - 프레임 위치를 정중앙으로 지정
setIconImgae(아이콘이미지) - 아이콘 이미지 설정
setResize(boolean) - 사용자가 크기 조절할지 여부 결정
객체.setBackground(Color.색상) - 객체의 배경색상을 설정
Sysyem.exit(0) - 프로그램 종료
배치관리자
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.*; - 모든 배치관리자 import
1. 패널 초기화를 통해 버튼들을 넣을 공간을 생성 JPanel jp = new JPanel();
2. 패널에 넣을 버튼을 생성 JButton jb1 = new JButton("버튼1");
3. JPanel 변수에 레이아웃을 설정 jp.setLayout(레이아웃 생성자 생성);
4. JPanel 변수에 각자 버튼을 추가 jp.add(버튼);
5. JFrame에 jp라는 패널을 추가 add(jp);
1. FlowLayout
import java.awt.FlowLayout;
- 특징
- Panel,JPanel,Applet 의 디폴트 배치 관리자
- 컴포넌트들을 자연스러운 크기로 한줄에 나타낼 때
- 배치 방법
1. 컨테이너에 컴포넌트가 들어올 때 왼쪽에서 오른쪽으로 순서대로 배치
jp.setLayout(new FlowLayout());
FlowLayout(int align, int hGap, int vGap) 디폴트 값: 5
align: 컴포넌트 정렬 방식
오른쪽: FlowLayout.RIGHT, 왼쪽 FlowLayout.LEFT , 중앙: FlowLayout.CENTER
hGap: 좌우 컴포넌트 간격
vGap: 상하 컴포넌트 간격
2. FlowLayout은 하나의 줄에 차례대로 배치가 되며 초과 시 다음 행으로 배치
jp.add(jb1);
jp.add(jb2);
or
jp.add(new JButton("jb3"));
2. BorderLayout
import java.awt.BorderLayout;
- 특징
- Frame, JFrame, Window,Dialog 의 디폴트 배치 관리자
- 컴포넌트를 가능한 크게 나타날 때
- 배치 방법
1. 컨테이너의 공간을 동, 서, 남, 북, 중앙영역으로 나눠 컴포넌트를 배치
jp.setLayout(new BorderLayout());
BorderLayout(int hGap, int vGap) 디폴트 값: 0
hGap: 좌우 컴포넌트 간격
vGap: 상하 컴포넌트 간격
2. BorderLayout은 버튼을 추가할 때 위치값 또한 지정해줘야한다.
동: jp.add(jb1,"East");
서: jp.add(jb2,"West");
남: jp.add(jb3,"North");
북: jp.add(jb4,"South");
중앙: jp.add(jb5,"Center");
or
jp.add(new JButton("jb6"),BorderLayout.WEST);
3. GridLayout
import java.awt.GridLayout;
- 배치방법
컨테이너의 공간을 설정한 크기 만큼 2차원 그리드로 나눠 컴포넌트를 배치 (행/열)
jp.setLayout(new GridLayout());
1. GridLayout()
2. GridLayout(int rows, int cols)
3. GridLayout(int rows, int cols, int hGap, int vGap)
rows: 행 개수 디폴트 1
cols: 열 개수 디폴트 1
hGap: 좌우 컴포넌트 간격 디폴트 0
vGap: 상하 컴포넌트 간격 디폴트 0
4. 절대 위치
배치관리자를 지정 하지 않게 설정
setLayout(null);
- 배치 방법
1. 각각의 컴포넌트의 크기와 위치를 설정해야한다.
setSize(너비, 높이)
setLocation(x,y)
setBounds(x, y, 너비, 높이)
ex) 컴포넌트 변수 button -> b.setBounds(50,50,100,40)
'JAVA > 기본 문법 내용 정리' 카테고리의 다른 글
GUI 이벤트 처리 (0) | 2021.11.05 |
---|---|
Swing 컴포넌트 (0) | 2021.11.03 |
컬렉션과 제네릭 (0) | 2021.10.29 |
입출력 (0) | 2021.10.07 |
인터페이스 & 추상 클래스 (0) | 2021.10.05 |