자바 객체지향 프로그래밍 - 9장: GUI 프로그래밍
이번 블로그 포스트에서는 자바 프로그래밍의 9장에서 다루는 Graphical User Interface (GUI) 프로그래밍에 대해 자세히 살펴보겠습니다. GUI 프로그래밍은 사용자가 쉽게 접근하고 이해할 수 있는 인터페이스를 제공하는 중요한 부분입니다. 이번 장에서는 자바의 GUI 프로그래밍에서 사용되는 주요 개념과 코드 예제를 통해 기본적인 GUI 프로그래밍 방법을 배워보겠습니다.
1. 자바의 GUI 프로그래밍 소개
GUI(Graphical User Interface)는 사용자가 마우스나 키보드를 사용하여 프로그램과 상호작용할 수 있게 해주는 인터페이스를 말합니다. 자바에서는 이러한 GUI를 구현하기 위해 AWT(Abstract Window Toolkit)와 Swing 패키지를 사용합니다.
- AWT: 자바가 처음 나왔을 때 함께 제공된 GUI 라이브러리입니다. AWT 컴포넌트는 운영체제의 도움을 받아 작동하는 '무거운' 컴포넌트입니다.
- Swing: AWT를 기반으로 순수 자바 언어로 작성된 라이브러리입니다. 모든 AWT 기능을 포함하며, 추가적인 고급 컴포넌트를 제공합니다. Swing 컴포넌트는 운영체제에 의존하지 않는 '가벼운' 컴포넌트로 이루어져 있습니다.
2. 스윙 컴포넌트
Swing 컴포넌트는 javax.swing 패키지에 포함되어 있으며, 대부분 JComponent 클래스를 상속받습니다. 예를 들어 JButton, JLabel, JTextField 등이 있습니다.
다음은 간단한 스윙 프로그램을 작성해보는 예제입니다.
import javax.swing.*;
public class MyFrame extends JFrame {
public MyFrame() {
setTitle("300x300 스윙 프레임 만들기");
setSize(300, 300); // 프레임 크기 300x300 설정
setVisible(true); // 프레임을 화면에 출력
}
public static void main(String[] args) {
MyFrame frame = new MyFrame(); // MyFrame 객체 생성
}
}
위 코드는 JFrame을 상속받아 기본적인 스윙 프레임을 생성하는 방법을 보여줍니다. setSize() 메소드를 통해 프레임의 크기를 설정하고, setVisible(true)로 프레임을 화면에 표시할 수 있습니다.
3. 컨테이너와 컴포넌트
컨테이너(Container)는 다른 GUI 컴포넌트를 포함할 수 있는 컴포넌트를 의미하며, 스윙에서는 JFrame, JPanel, JDialog 등이 이에 해당합니다. 컴포넌트(Component)는 컨테이너에 포함되어야 화면에 출력될 수 있는 순수한 GUI 요소들입니다. 모든 컴포넌트는 java.awt.Component 클래스를 상속받습니다.
4. 배치 관리자(Layout Manager)
배치 관리자는 컨테이너 안에 포함된 컴포넌트들의 위치와 크기를 관리합니다. 자바에서는 여러 종류의 배치 관리자를 제공하며, 대표적으로 FlowLayout, BorderLayout, GridLayout 등이 있습니다.
예를 들어, FlowLayout 배치 관리자를 사용하는 예제는 다음과 같습니다.
import javax.swing.*;
import java.awt.*;
public class FlowLayoutEx extends JFrame {
public FlowLayoutEx() {
setTitle("FlowLayout Sample");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout(FlowLayout.LEFT, 30, 40)); // 왼쪽 정렬, 수평 간격 30, 수직 간격 40 설정
c.add(new JButton("add"));
c.add(new JButton("sub"));
c.add(new JButton("mul"));
c.add(new JButton("div"));
c.add(new JButton("Calculate"));
setSize(300, 200); // 프레임 크기 300x200 설정
setVisible(true); // 프레임을 화면에 출력
}
public static void main(String[] args) {
new FlowLayoutEx(); // FlowLayoutEx 객체 생성
}
}
이 예제에서는 FlowLayout 배치 관리자를 사용하여 버튼들을 왼쪽에서 오른쪽으로 순서대로 배치합니다. setLayout() 메소드를 통해 배치 관리자를 설정할 수 있으며, 이 경우 FlowLayout.LEFT로 설정하여 왼쪽 정렬을 지정했습니다.
5. 예제: GridLayout 사용하기
GridLayout은 컨테이너를 동일한 크기의 격자 형태로 나누고, 각 셀에 하나의 컴포넌트를 배치하는 배치 관리자입니다. 다음은 GridLayout을 사용한 예제입니다.
import javax.swing.*;
import java.awt.*;
public class GridLayoutEx extends JFrame {
public GridLayoutEx() {
setTitle("GridLayout Sample");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout grid = new GridLayout(4, 2, 5, 5); // 4x2 그리드, 수평 및 수직 간격 5픽셀 설정
Container c = getContentPane();
c.setLayout(grid);
c.add(new JLabel(" 이름"));
c.add(new JTextField(""));
c.add(new JLabel(" 학번"));
c.add(new JTextField(""));
c.add(new JLabel(" 학과"));
c.add(new JTextField(""));
c.add(new JLabel(" 과목"));
c.add(new JTextField(""));
setSize(300, 200); // 프레임 크기 300x200 설정
setVisible(true); // 프레임을 화면에 출력
}
public static void main(String[] args) {
new GridLayoutEx(); // GridLayoutEx 객체 생성
}
}
이 예제에서는 GridLayout을 사용하여 4x2 격자로 나눈 후, 각 셀에 JLabel과 JTextField를 배치하여 사용자 입력 폼을 구성했습니다.
6. 배치 관리자가 없는 컨테이너
배치 관리자가 없는 컨테이너는 개발자가 직접 컴포넌트의 위치와 크기를 결정해야 합니다. 이 방법은 게임과 같이 복잡한 UI를 다룰 때 유용할 수 있습니다. 다음은 배치 관리자가 없는 컨테이너를 사용하는 예제입니다.
import javax.swing.*;
import java.awt.*;
public class NullContainerEx extends JFrame {
public NullContainerEx() {
setTitle("Null Container Sample");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(null); // 배치 관리자 제거
JLabel la = new JLabel("Hello, Press Buttons!");
la.setLocation(130, 50); // 위치 설정
la.setSize(200, 20); // 크기 설정
c.add(la);
for(int i = 1; i <= 9; i++) {
JButton b = new JButton(Integer.toString(i));
b.setLocation(i * 15, i * 15); // 위치 설정
b.setSize(50, 20); // 크기 설정
c.add(b); // 버튼을 컨텐트팬에 부착
}
setSize(300, 200); // 프레임 크기 300x200 설정
setVisible(true); // 프레임을 화면에 출력
}
public static void main(String[] args) {
new NullContainerEx(); // NullContainerEx 객체 생성
}
}
이 코드에서는 setLayout(null)을 사용하여 배치 관리자를 제거한 후, 컴포넌트의 위치와 크기를 직접 설정하였습니다.
결론
이번 장에서는 자바 GUI 프로그래밍의 기초를 다루었습니다. AWT와 Swing의 차이점, 기본적인 스윙 컴포넌트와 배치 관리자의 사용 방법을 이해하는 것이 중요합니다. 이러한 개념들을 바탕으로 더 복잡한 GUI 애플리케이션을 개발할 수 있으며, 사용자에게 더욱 직관적인 인터페이스를 제공할 수 있습니다. 다음 장에서는 이벤트 처리와 같은 고급 GUI 프로그래밍 개념을 다루어보겠습니다.
'Java' 카테고리의 다른 글
명품자바 프로그래밍의 기초: 11장 (0) | 2024.09.13 |
---|---|
명품자바 프로그래밍의 기초: 10장 (0) | 2024.09.02 |
명품자바 프로그래밍의 기초: 8장 (0) | 2024.09.02 |
명품자바 프로그래밍의 기초: 7장 (0) | 2024.08.25 |
명품자바 프로그래밍의 기초: 6장 (0) | 2024.08.18 |