Swing으로 만드는 미니언 성적 관리 프로그램 예제
이번 포스팅에서는 Swing을 사용하여 미니언 성적 관리 프로그램을 만드는 예제를 소개합니다.
1. 프로그램 개요
- 이 예제는 미니언 성적 관리를 위한 간단한 프로그램을 만들어보는 것입니다.
- 프로그램에는 총 세 명의 미니언이 등록되어 있으며, 사용자는 각 미니언의 이름과 성적을 입력할 수 있습니다.
- 입력한 성적은 리스트에 저장되고, 평균 성적과 최고 성적이 자동으로 계산됩니다.
2. 필요한 라이브러리 및 컴포넌트
- 이 예제를 위해 다음과 같은 라이브러리와 컴포넌트를 사용합니다.
- Swing 라이브러리
- JFrame 클래스: 프로그램의 기본 프레임
- JPanel 클래스: 프레임의 컨텐츠를 담을 패널
- JLabel 클래스: 텍스트를 표시하기 위한 레이블
- JTextField 클래스: 사용자로부터의 입력을 받기 위한 텍스트 필드
- JButton 클래스: 버튼
- JList 클래스: 성적 리스트를 표시하기 위한 리스트
3. 프로그램 흐름
- 프로그램이 시작되면 메인 프레임이 나타납니다.
- 사용자는 각 미니언의 이름과 성적을 입력합니다.
- 입력한 성적은 리스트에 저장되고, 평균 성적과 최고 성적이 자동으로 계산됩니다.
- 사용자는 성적을 업데이트하거나 삭제할 수 있습니다.
- 사용자는 모든 성적을 초기화할 수도 있습니다.
4. 예제 코드
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class MiniyonGradeManagementProgram extends JFrame {
// 미니언 클래스 정의
class Minion {
private String name;
private int grade;
public Minion(String name, int grade) {
this.name = name;
this.grade = grade;
}
public String getName() {
return name;
}
public int getGrade() {
return grade;
}
}
// 컴포넌트 정의
private ArrayList<Minion> minions;
private DefaultListModel<String> listModel;
private JList<String> gradeList;
private JTextField nameField;
private JTextField gradeField;
private JLabel averageLabel;
private JLabel maxLabel;
public MiniyonGradeManagementProgram() {
// 프레임 기본 설정
super("미니언 성적 관리");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
// 패널 생성
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new FlowLayout());
// 컴포넌트 초기화
minions = new ArrayList<>();
listModel = new DefaultListModel<>();
gradeList = new JList<>(listModel);
nameField = new JTextField(10);
gradeField = new JTextField(10);
averageLabel = new JLabel("평균 성적: ");
maxLabel = new JLabel("최고 성적: ");
JButton addButton = new JButton("추가");
addButton.addActionListener(new AddButtonListener());
JButton updateButton = new JButton("업데이트");
updateButton.addActionListener(new UpdateButtonListener());
JButton deleteButton = new JButton("삭제");
deleteButton.addActionListener(new DeleteButtonListener());
JButton resetButton = new JButton("초기화");
resetButton.addActionListener(new ResetButtonListener());
// 패널에 컴포넌트 추가
inputPanel.add(new JLabel("이름: "));
inputPanel.add(nameField);
inputPanel.add(new JLabel("성적: "));
inputPanel.add(gradeField);
inputPanel.add(addButton);
inputPanel.add(updateButton);
inputPanel.add(deleteButton);
inputPanel.add(resetButton);
add(inputPanel, BorderLayout.NORTH);
add(new JScrollPane(gradeList), BorderLayout.CENTER);
add(averageLabel, BorderLayout.SOUTH);
add(maxLabel, BorderLayout.SOUTH);
// 프레임 크기 및 가시성 설정
setSize(300, 400);
setVisible(true);
}
// "추가" 버튼 리스너
class AddButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String name = nameField.getText();
int grade = Integer.parseInt(gradeField.getText());
minions.add(new Minion(name, grade));
listModel.addElement(name);
calculateAverageGrade();
calculateMaxGrade();
}
}
// "업데이트" 버튼 리스너
class UpdateButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int selectedIndex = gradeList.getSelectedIndex();
String name = nameField.getText();
int grade = Integer.parseInt(gradeField.getText());
minions.set(selectedIndex, new Minion(name, grade));
listModel.set(selectedIndex, name);
calculateAverageGrade();
calculateMaxGrade();
}
}
// "삭제" 버튼 리스너
class DeleteButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int selectedIndex = gradeList.getSelectedIndex();
minions.remove(selectedIndex);
listModel.remove(selectedIndex);
calculateAverageGrade();
calculateMaxGrade();
}
}
// "초기화" 버튼 리스너
class ResetButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
minions.clear();
listModel.clear();
calculateAverageGrade();
calculateMaxGrade();
}
}
// 평균 성적 계산
private void calculateAverageGrade() {
int sum = 0;
for (Minion minion : minions) {
sum += minion.getGrade();
}
int average = sum / minions.size();
averageLabel.setText("평균 성적: " + average);
}
// 최고 성적 계산
private void calculateMaxGrade() {
int max = Integer.MIN_VALUE;
for (Minion minion : minions) {
if (minion.getGrade() > max) {
max = minion.getGrade();
}
}
maxLabel.setText("최고 성적: " + max);
}
// 메인 메서드
public static void main(String[] args) {
new MiniyonGradeManagementProgram();
}
}
5. 실행 결과
- 실행하면 다음과 같이 미니언 성적 관리 프로그램이 나타납니다.
위 예제는 Swing을 사용하여 미니언 성적 관리 프로그램을 만드는 예제입니다. 다음 포스팅에서는 이 예제를 더 발전시켜 실제로 데이터베이스와 연동하여 성적을 저장하고 관리하는 프로그램을 만드는 방법에 대해 소개할 예정입니다.
댓글