본문 바로가기

자바공부

자바 GUI, 스윙 GUI 만들기, 명품자바프로그래밍9장

728x90
반응형

* 스윙으로 GUI 응용프로그램을 만들기 위해서는 세 과정이 필요하다.

1. 프레임 만들기

2. 프레임에 스윙 컴포넌트 붙이기

3. main() 메소드 작성

 

* 스윙 패키지를 이용하기 위해서는 스윙 컴포넌트의 클래스 파일들이 존재하는 경로 명인 javax.swing.*;를 만드시 import 패야한다.

import java.awt.*;		// 그래픽 처리를 위한 클래스들의 경로명
import java.awt.event.*;	// AWT 이벤트 사용을 위한 경로명

import javax.swing.*;		// 스윙 컴포넌트 클래스들의 경로명
import javax.swing.event.*;	// 스윙 이벤트를 위한 경로명

 

* 스윙 프레임은 모든 스윙 컴포넌트들을 담는 최상위 컨테이너(Top Level Container)이다. 

프레임이 있어야 GUI 화면 출력이 가능하며 프레임 내에 부착된 모든 컴포넌트들이 화면에 출력된다.

컴포넌트들은 프레임 없이 독립적으로 화면에 출력될 수 없다.

프레임이 닫히면 프레임 내의 모든 컴포넌트들도 프레임과 함께 사라진다.

 

* 스윙에서 프레임의 역활을 수행하는 클래스가 JFrame 클래스이다.

JFrame 객체는 Frame(java.awt.Frame), 메뉴바(Menu Bar), 컨텐트팬(Content Pane)의 3공간으로 구성된다.

 

* JFrame은 AWT 패키지에 있는 클래스로서 JFrame이 java.awt.Frame을 상속받기 때문에 당연히 존재하며, 메뉴바는 메뉴들을 부착하는 공간이고, 컨텐트팬은 메뉴를 제외한 모든 GUI 컴포넌트들을 부착하는 공간이다.

스윙에서 프레임의 역할을 하는 JFrame

* 프레임을 만드는 방법은 두 가지가 있다.

1. JFrame 객체를 직접 생성하는 방법

import javax.swing.*;

public class MyApp{
	public static void main(String[] args){
    	JFrame f = new JFrame();
        f.setTitle("첫번째 프레임");
        f.setSize(300, 300);
        f.setVisible(true);
    }
}

이 방법은 단순하지만 권장되지 않는다.

프레임에 스윙 컴포넌트를 추가하는 과정이 불편하며 확장성, 융통성이 결여되는 단점이 있기 때문이다.

 

2. JFrame을 상속받아 새로운 프레임 클래스를 작성하는 방법

import javax.swing.*;

public class MyFrame extends JFrame{
	MyFame(){
    setTitle("첫번째 프레임");
    setSize(300, 300);
    setVisible(true);
    }
    
    public static void main(String[] args){
    MyFrame mf = new MyFrame();
    }
}

MyFrame 객체, 즉 프레임이 생성되면 프레임은 사용자의 입력을 받고 처리하는 등 스스로 동작한다.

main()의 기능은 프레임 객체를 생성하는 것으로 끝난다.

개발자는 MyFrame() 생성자에 필요한 코드를 마음대로 추가할 수 있다.

이 방법은 가독성(readability)의 측면에서 첫 번째 방법보다 나으며 MyFrame 클래스에 마음대로 메소드를 추가할 수 있기 때문에 확장성, 융통성이 뛰어나다.

두 가지 방법으로 생성된 스윙 프레임

 

* 스윙 응용프로그램에서 main() 메소드의 기능은 거의 없다.

main() 메소드는 두는 위치에 따라 2가지 방법이 있다.

1. 클래스의 메소드로 두는 방법

2. main() 메소드만을 가진 새로운 클래스를 만드는 방법

 

* 프레임은 응용프로그램을 구성하는 외곽 틀이다. 프레임 안에 여러 스윙 컴포넌트를 부착할 수 있다.

1) 타이틀

JFrame frame = new JFrame("타이틀문자열");	// JFrame의 생성자에 타이틀 달기
frame.setTitle("타이틀문자열");		// JFrame의 setTitle() 메소드를 이용하는 방법

 

2) 메뉴 붙이기

메뉴를 붙이기 위해서는 메뉴바, 메뉴, 메뉴 아이템을 만들고, 메뉴바를 JFrame의 메뉴바 영역에 붙인다.

JMenuBar mb = new JMenuBar();	// 메뉴바 컴포넌트 생성
JMenu fileMenu = new JMenu("File") // 생성자로 메뉴 이름 전달
mb.add(fileMenu); // 메뉴에 메뉴바를 붙임

 

3) 컨텐트팬에 컴포넌트 달기

스윙에서는 컨텐트팬(content pane)에만 컴포넌트를 부착할 수 있다.

컨텐트팬은 JFrame 객체가 처음 생길 때 자동으로 생성된다.

컨텐트팬은 Container 타입이다.

간단히 add() 메소드를 이용하여 컨텐트팬에 컴포넌트를 부착하면 된다.

JFrame frame = new JFrame();
Container contentPane = frame.getContentPane(); // 프레임에 연결된 컨탠트팬을 알아낸다.
JButton b1 = new JButton("Click");
contentPane.add(b1);	// 버튼을 컨텐트팬에 부착한다.

 

4) 컨텐트팬의 변경

JFrame의 생성 당시 붙어 있는 컨텐트팬을 제거하고 컨텐트팬을 새로 만들어서 붙일 수 있다.

컨텐트팬은 Container 타입이므로 Container를 상속받은 어떤 컴포넌트도 컨텐트팬이 될 수 있다.

class MyPanel extends JPanel{
	// JPanel을 상속받은 패널을 구현한다.
}

frame.setContentPane(new MyPanel()); // 프레임의 컨텐트팬을 MyPanel 객체로 변경
반응형