728x90
Swing이란?
Swing은 자바에서 GUI(그래픽 사용자 인터페이스)를 만들 수 있도록 제공하는 JFC(Java Foundation Classes) 라이브러리 중 하나입니다.
다양한 버튼, 텍스트 필드, 패널, 메뉴 등의 컴포넌트를 제공하며, 크로스 플랫폼에서 동일한 UI를 구현할 수 있습니다.
Swing은 언제 사용할까요?
1. 간단한 데스크탑 애플리케이션 (예: 계산기, 메모장, 파일 탐색기 등)
2. 내부 관리 시스템, 데이터 시각화 툴
그럼 왜 사용할까요?
자바 표준 라이브러리로 포함하여 사용하여 편리합니다.
Windows, macOS, Linux에서 동일한 코드로 실행 가능.
예제코드
// Swing 패키지 및 이벤트 처리를 위한 패키지 임포트
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener { // JFrame을 상속받아 GUI 창을 생성하고, ActionListener를 구현하여 버튼 클릭 이벤트 처리
private JTextField display; // 계산 결과를 표시할 텍스트 필드
private String operator; // 현재 선택된 연산자 저장
private double result; // 연산 결과 저장
private boolean startNewNumber; // 새로운 숫자 입력 여부 확인
public Calculator() { // 생성자: 계산기 UI를 초기화하는 역할
super("Calculator"); // JFrame의 제목 설정
// 🟢 텍스트 필드 설정 (결과 표시 영역)
display = new JTextField("0"); // 초기값을 "0"으로 설정
display.setEditable(false); // 사용자가 직접 입력하지 못하도록 설정
display.setHorizontalAlignment(JTextField.RIGHT); // 텍스트를 오른쪽 정렬
display.setFont(new Font("Arial", Font.BOLD, 20)); // 폰트 스타일과 크기 지정
// 🟢 버튼 패널 생성 (4x4 배열의 버튼 배치)
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4, 4, 5, 5)); // 4x4 그리드 레이아웃 사용 (5px 간격)
// 버튼 배열: 숫자 버튼(0~9)과 연산자(+,-,*,/,=,C) 포함
String[] buttons = {
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"0", "C", "=", "+"
};
// 🟢 버튼 생성 및 이벤트 리스너 등록
for (String text : buttons) {
JButton button = new JButton(text); // 버튼 객체 생성
button.setFont(new Font("Arial", Font.BOLD, 20)); // 버튼 글꼴 지정
button.addActionListener(this); // 버튼 클릭 이벤트 리스너 등록
panel.add(button); // 패널에 버튼 추가
}
// 🟢 레이아웃 설정
setLayout(new BorderLayout(5, 5)); // 창의 레이아웃을 BorderLayout으로 설정
add(display, BorderLayout.NORTH); // 텍스트 필드를 창 상단(NORTH)에 배치
add(panel, BorderLayout.CENTER); // 버튼 패널을 중앙(CENTER)에 배치
// 🟢 기본 창 설정
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 창 닫기 버튼 클릭 시 프로그램 종료
setSize(300, 400); // 창 크기 설정
setLocationRelativeTo(null); // 창을 화면 정중앙에 배치
setVisible(true); // 창을 화면에 표시
// 초기값 설정
operator = ""; // 연산자 초기화
result = 0; // 연산 결과 초기화
startNewNumber = true; // 새 숫자 입력 시작 여부 초기화
}
@Override
public void actionPerformed(ActionEvent e) { // 버튼 클릭 시 호출되는 메서드
String command = e.getActionCommand(); // 클릭된 버튼의 텍스트 가져오기
// 🟢 숫자 버튼 클릭 처리
if ("0123456789".contains(command)) {
if (startNewNumber) { // 새로운 숫자 입력 시작이면
display.setText(command); // 현재 숫자로 설정
startNewNumber = false;
} else {
display.setText(display.getText() + command); // 기존 숫자에 이어 붙이기
}
}
// 🟢 "C" 버튼 클릭: 초기화
else if (command.equals("C")) {
display.setText("0"); // 화면을 "0"으로 리셋
operator = ""; // 연산자 초기화
result = 0; // 결과 초기화
startNewNumber = true;
}
// 🟢 "=" 버튼 클릭: 연산 실행
else if (command.equals("=")) {
calculate(Double.parseDouble(display.getText())); // 현재 숫자로 연산 수행
operator = ""; // 연산자 초기화
display.setText("" + result); // 결과 표시
startNewNumber = true;
}
// 🟢 연산자 버튼 클릭 (+, -, *, /)
else {
if (!operator.isEmpty() && !startNewNumber) { // 이전 연산이 있다면 먼저 계산 수행
calculate(Double.parseDouble(display.getText()));
display.setText("" + result); // 결과 표시
} else {
result = Double.parseDouble(display.getText()); // 현재 숫자를 결과 변수에 저장
}
operator = command; // 현재 선택한 연산자 저장
startNewNumber = true; // 새 숫자 입력 시작
}
}
// 🟢 연산 수행 메서드
private void calculate(double n) {
switch (operator) {
case "+": result += n; break; // 덧셈 수행
case "-": result -= n; break; // 뺄셈 수행
case "*": result *= n; break; // 곱셈 수행
case "/":
if (n != 0) {
result /= n; // 나눗셈 수행
} else {
JOptionPane.showMessageDialog(this, "0으로 나눌 수 없습니다."); // 0으로 나누면 경고 메시지 표시
result = 0;
}
break;
default:
result = n;
}
}
// 🟢 프로그램 실행 메인 메서드
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new Calculator()); // GUI 실행을 Event Dispatch Thread에서 실행
}
}
시연영상
'Java' 카테고리의 다른 글
[JAVA] HttpURLConnection을 활용한 HTTP 통신과 REST API 이해하기 (0) | 2025.03.27 |
---|---|
[Java] nanoTime 사용해서 경과 시간 측정하기 (0) | 2025.03.26 |
[JAVA] ExecutorService로 Thread Pool 구현하기 (0) | 2025.03.20 |
[Java] 컬렉션(Collection) 기초 개념과 List, Set, Map 차이 (0) | 2025.03.19 |
[Java] synchronized를 활용한 멀티스레드 동기화 처리 (0) | 2025.03.13 |