자바 GUI 기초

·2025년 5월 18일

Power Java

목록 보기
51/75

9.2 자바 GUI 기초

컨테이너 컴포넌트

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

최상위 컨테이너

: 절대 다른 컨테이너 안에 포함될 수 없는 컨테이너를 의미한다.
ex) JFrame, JDialog, JApplet 등

< GUI 프로그램을 만드는 절차 >

1) 컨테이너 생성
2) 컴포넌트 추가

< 프레임을 생성하는 방법 #1 >

-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)
    }
}
  1. javax.swing 패키지 안의 모든 클래스를 포함한다.
  2. new 연산자를 이용하여 JFrame 객체를 생성한다.
  3. 프레임의 타이틀을 설정한다.
  4. 프레임 객체의 setSize() 메소드를 호출하여 프레임의 크기를 변경한다.
  5. 프레임 객체의 setVisible() 메소드를 호출하여 프레임이 화면에 나타나게 한다.
  6. 프레임의 닫힘 버튼(우측 상단의 x자 버튼)을 누르면 전체 프로그램이 종료되게 한다.

main()에서는 MyFrame() 객체를 생성한 ㄷ후에 종료하지만, 윈도우는 종료되지 않는다.
=> 자바 스윙에서 JFrame 객체를 만들면 윈도우를 담당하는 새로운 스레드가 하나 생성된다.(스레드는 독립적) 따라서 main()이 종료되더라도 윈도우는 없어지지 않는다.

< 프레임을 생성하는 방법 #2 >

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)
    }
}
  1. javax.swing 패키지 안의 모든 클래스를 포함한다.
  2. JFrame을 상속하여 MyFrame 클래스를 정의한다.
  3. MyFrame 클래스의 생성자에서 MyFrame 객체를 초기화한다.
  4. main()에서 MyFrame 객체를 생성한다. MyFrame 생성자가 호출되면서 모든 작업이 시작된다.

<참고>
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();
    }
}
  1. MyFrame 클래스의 생성자에서 setLayout(setLayout(new FlowLayout()); 문장을 실행하여 "배치 관리자"를 FlowLayout으로 변경한다.

배치 관리자는 컨테이너 안에서 자식 컴포넌트의 배치를 담당하는 객체이다.
(배치 관리자도 객체이기 때문에 new로 생성)

  • FlowLayout - 자식 컴포넌트들을 순차적으로 배치하는 배치 관리자
  1. new 연산자를 이용하여 버튼 객체를 생성한다.
  2. add(button); 문장을 실행하여 버튼을 프레임에 추가한다.


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

0개의 댓글