* 스윙으로 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 컴포넌트들을 부착하는 공간이다.
* 프레임을 만드는 방법은 두 가지가 있다.
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 객체로 변경
'자바공부' 카테고리의 다른 글
자바 컨테이너와 배치(1), 명품자바프로그래밍 9장 (0) | 2022.07.24 |
---|---|
자바 스윙 응용프로그램 종료, 명품자바프로그래밍9장 (0) | 2022.07.24 |
자바의 GUI, 명품 자바 프로그래밍 9장 (0) | 2022.06.14 |
명품 자바 프로그래밍 9장, 자바 GUI 기초, AWT와 스윙(Swing) 요약 (0) | 2022.06.14 |
명품 자바 프로그래밍 8장, 입출력 스트림과 파일 입출력 요약 (0) | 2022.06.14 |