import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class EX6 extends JFrame {
private JTextField tfInput; // 수식 입력 필드
private JTextField tfOutput; // 결과 출력 필드
public EX6() {
super("Calculator");
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new BorderLayout());
c.add(new northPanel(), BorderLayout.NORTH);
c.add(new centerPanel(), BorderLayout.CENTER);
c.add(new southPanel(), BorderLayout.SOUTH);
setSize(400, 400);
setVisible(true);
c.setFocusable(true);
c.requestFocus();
}
class northPanel extends JPanel {
public northPanel() {
setBackground(Color.GRAY);
JLabel input = new JLabel("수식");
tfInput = new JTextField(20); // 필드 초기화
setLayout(new FlowLayout());
add(input);
add(tfInput);
}
}
class centerPanel extends JPanel {
public centerPanel() {
String[] buttonOrder = {"C", "UN", "BK", "/", "7", "8", "9", "x", "4", "5", "6", "-", "1", "2", "3", "+", "0", ".", "=", "%"};
JButton[] buttons = new JButton[buttonOrder.length];
setLayout(new GridLayout(5, 4));
for (int i = 0; i < buttonOrder.length; i++) {
buttons[i] = new JButton(buttonOrder[i]);
add(buttons[i]);
// 버튼별 이벤트 처리
String btnText = buttonOrder[i];
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
switch (btnText) {
case "C":
tfInput.setText(""); // 입력 필드 초기화
tfOutput.setText(""); // 결과 필드 초기화
break;
case "UN":
String inputText = tfInput.getText();
if (inputText.length() > 0) {
tfInput.setText(inputText.substring(0, inputText.length() - 1));
}
break;
case "BK":
// 작동하지 않는 버튼
break;
case "=":
calculateResult(); // 결과 계산
break;
default:
tfInput.setText(tfInput.getText() + btnText); // 버튼 값 추가
break;
}
}
});
}
}
}
class southPanel extends JPanel {
public southPanel() {
setBackground(Color.YELLOW);
JLabel output = new JLabel("결과");
tfOutput = new JTextField(20); // 필드 초기화
tfOutput.setEditable(false); // 결과 필드는 읽기 전용
setLayout(new FlowLayout());
add(output);
add(tfOutput);
}
}
private void calculateResult() {
String expression = tfInput.getText().trim();
try {
if (expression.contains("/")) {
String[] parts = expression.split("/");
double num1 = Double.parseDouble(parts[0]);
double num2 = Double.parseDouble(parts[1]);
if (num2 == 0) {
tfOutput.setText("0으로 나눌 수 없음");
} else {
tfOutput.setText(String.valueOf(num1 / num2));
}
} else if (expression.contains("x")) {
String[] parts = expression.split("x");
double num1 = Double.parseDouble(parts[0]);
double num2 = Double.parseDouble(parts[1]);
tfOutput.setText(String.valueOf(num1 * num2));
} else if (expression.contains("+")) {
String[] parts = expression.split("\\+");
double num1 = Double.parseDouble(parts[0]);
double num2 = Double.parseDouble(parts[1]);
tfOutput.setText(String.valueOf(num1 + num2));
} else if (expression.contains("-")) {
String[] parts = expression.split("-");
double num1 = Double.parseDouble(parts[0]);
double num2 = Double.parseDouble(parts[1]);
tfOutput.setText(String.valueOf(num1 - num2));
} else if (expression.contains("%")) {
String[] parts = expression.split("%");
double num1 = Double.parseDouble(parts[0]);
double num2 = Double.parseDouble(parts[1]);
tfOutput.setText(String.valueOf(num1 % num2));
} else {
tfOutput.setText("잘못된 수식");
}
} catch (Exception e) {
tfOutput.setText("오류: 유효하지 않은 수식");
}
}
public static void main(String[] args) {
new EX6();
}
}
'JAVA' 카테고리의 다른 글
Money Changer with CheckBox (0) | 2024.12.06 |
---|---|
컬렉션 (1) | 2024.09.24 |
Chapter 05 실습 문제 (0) | 2024.08.19 |
상속 활용 예제 (0) | 2024.08.18 |
Chapter 04 실습 문제 (0) | 2024.08.16 |