컴퓨터를 사용하는 사용자를 위해 만들어진 특정한 기능을 가진 그래픽 요소
사용자가 프로그램을 쉽게 다룰 수 있도록 그래픽을 제공하도록 프로그래밍 하는 것
자바에서 GUI를 프로그래밍 하기 위해 처음으로 제공한 라이브러리
AWT를 대체하기 위해 자바로 작성된 GUI 객체
실제 GUI 프로그래밍을 하기 위해서 사용하는 메서드
| 메서드 | 기능 | 
|---|---|
| setLocation(int x, int y) | 프레임의 위치를 지정 | 
| setSize(int width, int height) | 프레임의 크기를 지정 | 
| setIconImage(Image IconImage) | 프레임의 타이틀 바에 보여질 아이콘 설정 | 
| setTitle(String title) | 타이틀바의 제목을 설정 | 
| setVisible(boolean b) | 화면에 표시 여부를 설정 | 
import java.awt.FlowLayout;
import javax.swing.*;
public class AddFrame extends JFrame{
	
	AddFrame(){
		setTitle("JFrame");
		setSize(300,300);
		
		//컴포넌트 만들기
		JButton button=new JButton("button");
		JCheckBox box = new JCheckBox("checkbox");
		JSlider slide = new JSlider();
		JTextField tf=new JTextField("text 입력",20);
		this.setLayout(new FlowLayout());
		
		this.add(button);
		this.add(box);
		this.add(slide);
		this.add(tf);
		
		setVisible(true);
		
		//내 프로그램 닫는 기능을 닫기 버튼으로 설정
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	
	public static void main(String[] args) {
		
		new AddFrame();
	}
}컨테이너 내부에 컴포넌트 추가 시 각각의 위치와 크기에 관해 결정
| 배치관리자 | 특징 | 
|---|---|
| FlowLayout | 왼 → 오 순서대로 배치 | 
| BorderLayout | 컨테이너 공간을 동서남북 중앙으로 나누고 지정한 영역에 배치 | 
| GridLayout | 컨테이너 공간을 동일 크기의 2차원 격자로 나누고 들어오는 순서대로 왼 → 오 배치 | 
| CardLayout | 카드를 쌓아놓은 듯이 컴포넌트를 쪼개어 배치 | 
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class AddFrame extends JFrame{
	public static void main(String[] args) {
//		new FlowWindow();
//		new BorderWindow();
		new GridWindow();
	}
}
class FlowWindow extends JFrame{
	FlowWindow(){
		setTitle("flow window");
		setSize(300, 300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JButton btn1=new JButton("btn1");
		JButton btn2=new JButton("btn2");
		JButton btn3=new JButton("btn3");
		
		this.add(btn1);
		this.add(btn2);
		this.add(btn3);
		
		this.setLayout(new FlowLayout());
		
		setVisible(true);
	}
}
class BorderWindow extends JFrame{
	BorderWindow(){
		setTitle("border window");
		setSize(300, 300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JButton btn1=new JButton("btn1");
		JButton btn2=new JButton("btn2");
		JButton btn3=new JButton("btn3");
		JButton btn4=new JButton("btn4");
		JButton btn5=new JButton("btn5");
		this.setLayout(new BorderLayout());
		this.add(btn1,BorderLayout.EAST);
		this.add(btn2, BorderLayout.WEST);
		this.add(btn3, BorderLayout.SOUTH);
		this.add(btn4, BorderLayout.NORTH);
		this.add(btn5, BorderLayout.CENTER);
		
		
		
		setVisible(true);
	}
}
class GridWindow extends JFrame{
	GridWindow(){
		setTitle("grid window");
		setSize(300, 300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
		JButton btn1=new JButton("btn1");
		JButton btn2=new JButton("btn2");
		JButton btn3=new JButton("btn3");
		
		this.add(btn1);
		this.add(btn2);
		this.add(btn3);
		
		this.setLayout(new GridLayout(2, 2));
		
		setVisible(true);
	}
}