GUI 실습 - Calculator
/src
ㄴ/controller
ㄴCal_controller.java
ㄴ/model
ㄴCal_model.java
ㄴ/view
ㄴCal_view.java
Model
package model;
public class Cal_model {
private String op;
private double firstValue;
private double secondValue;
private double result;
private double text;
public void calculate(String op, double first, double second) {
switch(op){
case "+" :
setResult(plus(first,second));
break;
case "-" :
setResult(minus(first,second));
break;
case "*" :
setResult(multiply(first,second));
break;
case "/" :
setResult(divide(first,second));
break;
default:
break;
}
}
public double plus(double first,double second) {
return first+second;
}
public double minus(double first,double second) {
return first-second;
}
public double multiply(double first,double second) {
return first*second;
}
public double divide(double first,double second) {
return first/second;
}
public String getOp() {
return op;
}
public void setOp(String op) {
this.op = op;
}
public double getFirstValue() {
return firstValue;
}
public void setFirstValue(double firstValue) {
this.firstValue = firstValue;
}
public double getSecondValue() {
return secondValue;
}
public void setSecondValue(double secondValue) {
this.secondValue = secondValue;
}
public double getResult() {
return result;
}
public void setResult(double result) {
this.result = result;
}
public double getText() {
return text;
}
public void setText(double text) {
this.text = text;
}
}
View
package view;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import model.Cal_model;
public class Cal_view extends JFrame {
private JPanel panel,bottom,side;
// 0~9까지 숫자
private JButton btnNum[] = new JButton[10];
// clear, decimal, divide,equals,minus,multiply, plus,ponseg
private JButton btnOp[] = new JButton[8];
String operation[] = {"C",".","+","-","*","/","+/-","="};
//보여지는곳
private JTextField display = new JTextField();
//소수점구현
private int decimalClick;
public Cal_view() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 340, 440);
getContentPane().setLayout(null);
display.setFont(new Font("Apple SD Gothic Neo", 1, 30));
display.setBounds(6,6,328,58);
display.setBackground(Color.WHITE);
getContentPane().add(display);
panel = new JPanel();
panel.setBounds(6, 66, 235, 271);
getContentPane().add(panel);
panel.setLayout(new GridLayout(4,3));
bottom = new JPanel();
bottom.setBounds(6, 338, 328, 74);
getContentPane().add(bottom);
bottom.setLayout(new GridLayout(1,2));
side = new JPanel();
side.setBounds(240, 66, 94, 271);
getContentPane().add(side);
side.setLayout(new GridLayout(4,1));
for(int i=0;i<10;i++) {
btnNum[i] = new JButton(""+i);
btnNum[i].setFont(new Font("Apple SD Gothic Neo", 1, 16));
if(i!=0)panel.add(btnNum[i]);
}
panel.add(btnNum[0]);
for(int i=0;i<8;i++) {
btnOp[i] = new JButton(operation[i]);
btnOp[i].setFont(new Font("Apple SD Gothic Neo", 1, 16));
if(i<2) {
panel.add(btnOp[i]);
}else if(i<6) {
side.add(btnOp[i]);
}else {
bottom.add(btnOp[i]);
}
}
}
public Cal_view(Cal_model model) {
this();
for(int i=0;i<10;i++) {
numberAction(model, btnNum[i],i);
}
btnOp[0].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
display.setText("");
decimalClick=0;
}
});
btnOp[1].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(decimalClick==0){
display.setText(display.getText()+btnOp[1].getText());
decimalClick=1;
}
}
});
for(int i=2;i<6;i++) {
opAction(model, btnOp[i],i);
decimalClick = 0;
}
btnOp[6].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double plusminus = (Double.parseDouble(String.valueOf(display.getText())));
plusminus = plusminus*(-1);
display.setText(String.valueOf(plusminus));
}
});
btnOp[7].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
model.setSecondValue((Double.parseDouble(String.valueOf(display.getText()))));
model.calculate(model.getOp(), model.getFirstValue(), model.getSecondValue());
display.setText((String.valueOf(model.getResult())));
}
});
}
public void numberAction(Cal_model model, JButton btnNum, int i) {
btnNum.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
display.setText(display.getText()+btnNum.getText());
}
});
}
public void opAction(Cal_model model, JButton btnOp, int i) {
btnOp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
model.setFirstValue((Double.parseDouble(String.valueOf(display.getText()))));
model.setOp(operation[i]);
display.setText("");
}
});
}
}
Controller
package controller;
import model.Cal_model;
import view.Cal_view;
public class Cal_controller {
public static void main(String[] args) {
// TODO Auto-generated method stub
Cal_model m = new Cal_model();
Cal_view v= new Cal_view(m);
v.setVisible(true);
}
}
Last updated