객체지향 11장은 자바 스윙(Swing) 라이브러리를 활용한 컴포넌트 기반 GUI 프로그래밍에 대해 다루고 있습니다. 주요 내용은 다음과 같습니다.
1. 컴포넌트 기반 GUI 프로그래밍
자바에서 제공하는 스윙 패키지를 활용하여 GUI 컴포넌트를 사용하는 방법을 설명합니다. 스윙은 자바에서 GUI를 쉽게 구성할 수 있도록 지원하는 패키지로, 컴포넌트를 활용한 GUI는 일반적인 프로그램에 적합합니다.
2. 기본 스윙 컴포넌트 및 상속
스윙의 기본적인 컴포넌트는 JComponent
클래스를 상속받아 기능을 확장합니다. 예를 들어, 버튼, 텍스트 필드, 레이블, 체크박스 등이 있으며, 이들의 공통 메소드와 사용 방법을 설명합니다.
3. JLabel (레이블)
- 텍스트 또는 이미지를 표시하는 컴포넌트입니다.
JLabel
은 텍스트만 표시하거나 이미지와 함께 표시할 수 있으며, 텍스트 및 이미지를 정렬할 수 있습니다.
import javax.swing.*;
import java.awt.*;
public class LabelEx extends JFrame {
public LabelEx() {
setTitle("레이블 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JLabel textLabel = new JLabel("사랑합니다.");
ImageIcon beauty = new ImageIcon("images/beauty.jpg");
JLabel imageLabel = new JLabel(beauty);
c.add(textLabel);
c.add(imageLabel);
setSize(400, 300);
setVisible(true);
}
public static void main(String[] args) {
new LabelEx();
}
}
4. JButton (버튼)
- 사용자가 클릭할 수 있는 버튼을 만들 수 있습니다.
- 버튼에 이미지 및 텍스트를 추가하거나 마우스 이벤트에 따른 시각적 효과를 줄 수 있습니다.
import javax.swing.*;
import java.awt.*;
public class ButtonEx extends JFrame {
public ButtonEx() {
setTitle("이미지 버튼 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
ImageIcon normalIcon = new ImageIcon("images/normalIcon.gif");
JButton btn = new JButton("call~~", normalIcon);
c.add(btn);
setSize(250, 150);
setVisible(true);
}
public static void main(String[] args) {
new ButtonEx();
}
}
5. JCheckBox (체크박스)
- 두 가지 상태(선택/비선택)를 가질 수 있는 컴포넌트입니다.
- 체크박스의 선택 상태에 따라 아이템 이벤트가 발생하며, 이를 통해 다양한 상태 변화에 따른 동작을 구현할 수 있습니다.
import javax.swing.*;
import java.awt.*;
public class CheckBoxEx extends JFrame {
public CheckBoxEx() {
setTitle("체크박스 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JCheckBox apple = new JCheckBox("사과");
JCheckBox pear = new JCheckBox("배", true);
c.add(apple);
c.add(pear);
setSize(300, 200);
setVisible(true);
}
public static void main(String[] args) {
new CheckBoxEx();
}
}
6. JRadioButton (라디오 버튼)
- 한 그룹 내에서 하나의 버튼만 선택할 수 있는 컴포넌트입니다.
- 그룹에 속한 여러 버튼 중 하나만 선택되며, 체크박스와 달리 선택이 자동으로 변경됩니다.
import javax.swing.*;
import java.awt.*;
public class RadioButtonEx extends JFrame {
public RadioButtonEx() {
setTitle("라디오버튼 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
ButtonGroup g = new ButtonGroup();
JRadioButton apple = new JRadioButton("사과");
JRadioButton pear = new JRadioButton("배", true);
JRadioButton cherry = new JRadioButton("체리");
g.add(apple);
g.add(pear);
g.add(cherry);
c.add(apple);
c.add(pear);
c.add(cherry);
setSize(250, 150);
setVisible(true);
}
public static void main(String[] args) {
new RadioButtonEx();
}
}
7. JTextField (텍스트 필드)
- 한 줄짜리 텍스트 입력 창을 제공합니다.
- 사용자가 텍스트를 입력하고 엔터 키를 입력하면 액션 이벤트가 발생합니다.
import javax.swing.*;
import java.awt.*;
public class TextFieldEx extends JFrame {
public TextFieldEx() {
setTitle("텍스트필드 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(new JLabel("이름 "));
c.add(new JTextField(20)); // 20글자 입력 가능
c.add(new JLabel("학과 "));
c.add(new JTextField("컴퓨터공학과", 20));
c.add(new JLabel("주소 "));
c.add(new JTextField("서울시 ...", 20));
setSize(300, 150);
setVisible(true);
}
public static void main(String[] args) {
new TextFieldEx();
}
}
8. JTextArea (텍스트 영역)
- 여러 줄의 텍스트를 입력할 수 있는 영역을 제공하며, 스크롤을 지원하여 긴 텍스트를 표시할 수 있습니다.
import javax.swing.*;
import java.awt.*;
public class TextAreaEx extends JFrame {
public TextAreaEx() {
setTitle("텍스트영역 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JTextField tf = new JTextField(20);
JTextArea ta = new JTextArea(7, 20);
c.add(new JLabel("입력 후 <Enter> 키를 입력하세요"));
c.add(tf);
c.add(new JScrollPane(ta)); // 스크롤 추가
tf.addActionListener(e -> {
ta.append(tf.getText() + "\n"); // 텍스트 추가
tf.setText(""); // 입력창 초기화
});
setSize(300, 300);
setVisible(true);
}
public static void main(String[] args) {
new TextAreaEx();
}
}
9. JList (리스트)
- 여러 개의 항목을 리스트 형식으로 보여주는 컴포넌트입니다.
- 리스트 항목은 객체 배열 또는 벡터를 사용하여 구성할 수 있으며, 스크롤 기능을 포함할 수 있습니다.
import javax.swing.*;
import java.awt.*;
public class ListEx extends JFrame {
private String[] fruits = {"사과", "배", "키위", "망고", "배", "복숭아", "딸기"};
public ListEx() {
setTitle("리스트 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JList<String> fruitList = new JList<>(fruits); // 문자열 리스트 생성
c.add(fruitList);
JList<String> scrollList = new JList<>(fruits); // 스크롤 가능한 리스트
c.add(new JScrollPane(scrollList));
setSize(300, 300);
setVisible(true);
}
public static void main(String[] args) {
new ListEx();
}
}
10. JComboBox (콤보박스)
- 텍스트 필드와 버튼, 드롭다운 리스트를 포함하는 컴포넌트로, 여러 개의 항목 중 하나를 선택할 수 있습니다.
import javax.swing.*;
import java.awt.*;
public class ComboBoxEx extends JFrame {
private String[] fruits = {"사과", "바나나", "키위", "망고", "배", "복숭아"};
public ComboBoxEx() {
setTitle("콤보박스 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JComboBox<String> fruitCombo = new JComboBox<>(fruits); // 콤보박스 생성
c.add(fruitCombo);
setSize(300, 200);
setVisible(true);
}
public static void main(String[] args) {
new ComboBoxEx();
}
}
11. JSlider (슬라이더)
- 사용자가 마우스로 움직이며 값을 선택할 수 있는 컴포넌트입니다.
- 슬라이더 값이 변경될 때
ChangeEvent
가 발생하여 다양한 반응을 구현할 수 있습니다.
import javax.swing.*;
import java.awt.*;
public class SliderEx extends JFrame {
public SliderEx() {
setTitle("슬라이더 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 200, 100);
slider.setPaintLabels(true);
slider.setPaintTicks(true);
slider.setMajorTickSpacing(50);
slider.setMinorTickSpacing(10);
c.add(slider);
setSize(300, 100);
setVisible(true);
}
public static void main(String[] args) {
new SliderEx();
}
}
예제
각 컴포넌트에 대한 코드 예제를 통해 자바 GUI 프로그래밍을 실습할 수 있습니다. 예를 들어, JButton
을 이용한 버튼 만들기, JCheckBox
로 가격 합산하기, JSlider
로 색상 조정하기 등의 실습 예제가 포함되어 있습니다.
'Java' 카테고리의 다른 글
명품자바 프로그래밍의 기초: 13장 (0) | 2024.09.17 |
---|---|
명품자바 프로그래밍의 기초: 12장 (0) | 2024.09.15 |
명품자바 프로그래밍의 기초: 10장 (0) | 2024.09.02 |
명품자바 프로그래밍의 기초: 9장 (0) | 2024.09.02 |
명품자바 프로그래밍의 기초: 8장 (0) | 2024.09.02 |