9.2 자바 GUI 기초
: 다른 컴포넌트를 내부에 넣을 수 있는 컴포넌트
-단순 컴포넌트와 컨테이너 컴포넌트로 나누어짐.

: 절대 다른 컨테이너 안에 포함될 수 없는 컨테이너를 의미한다.
ex) JFrame, JDialog, JApplet 등
1) 컨테이너 생성
2) 컴포넌트 추가
-JFrame 객체를 생성하면 하나의 프레임이 만들어진다.
(=> 상속보다 구성에 더 가까운 방법)
import javax.swing.*; // (1)
public class FrameTest {
public static void main(String[] args) {
JFrame f = new JFrame("Frame Test"); // (2)
f.setTitle("MyFrame"); // (3)
f.setSize(300, 200); // (4)
f.setVisible(true); // (5)
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // (6)
}
}
main()에서는 MyFrame() 객체를 생성한 ㄷ후에 종료하지만, 윈도우는 종료되지 않는다.
=> 자바 스윙에서 JFrame 객체를 만들면 윈도우를 담당하는 새로운 스레드가 하나 생성된다.(스레드는 독립적) 따라서 main()이 종료되더라도 윈도우는 없어지지 않는다.
JFrame 클래스를 직접 사용하지 않고
JFrame 클래스를 상속한 MyFrame을 정의할 수도 있다.
-Myframe 클래스의 객체는 JFrame의 객체를 포함하고 있다. (객체 생성 시 프레임 또한 생성됨)
import javax.swing.*; // (1)
public class MyFrame extends JFrame { // (2)
public MyFrame() { // (3)
setSize(300, 200);
setTitle("MyFrame");
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyFrame f = new MyFrame(); // (4)
}
}
<참고>
main()은 자동차의 시동 버튼
클래스에 main()이 있으면, 그 클래스는 시동이 달린 차가 되는 것.
-add() 메소드를 이용하면 컴포넌트를 컨테이너에 추가할 수 있다.
import javax.swing.*;
import java.awt.FlowLayout;
public class MyFrame extends JFrame {
public MyFrame() {
setSize(300, 200);
setTitle("MyFrame");
setLayout(new FlowLayout()); // (1)
JButton button = new JButton("버튼"); // (2)
add(button); // (3)
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MyFrame f = new MyFrame();
}
}
배치 관리자는 컨테이너 안에서 자식 컴포넌트의 배치를 담당하는 객체이다.
(배치 관리자도 객체이기 때문에 new로 생성)

1. JFrame
2.
1) JFrame 객체 생성
2) JButton 객체 생성
3) 버튼을 프레임에 추가 (add())
4) 프레임 기본 설정 (setSize(), setDefaultCloseOperation(), setVisible(true))