diff --git a/src/java2020spring/Calculator.java b/src/java2020spring/Calculator.java new file mode 100644 index 0000000000000000000000000000000000000000..2224005b82d4ad424a9dcb22f875c5da313fa671 --- /dev/null +++ b/src/java2020spring/Calculator.java @@ -0,0 +1,286 @@ +package java2020spring; +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.text.NumberFormat; + + +public class Calculator { + JFrame frame; + JTextField textField; + JButton[] button; + JPanel panel; + JLabel label; + String data = "";//data:当前输入的数据 + double curdata; + boolean isLeftAvailable;// isLeftAvailable:判断数据应该向哪一个操作数中存储 + double left, right;//left, right:左右操作数 + String preOperator = ""; + + public void init(){//初始化 + + setFrame();//窗口 + setTextField();//输入框 + setButton();//按钮 + setLabel();//标签 + display();//显示窗口 + } + + public void display(){ //设置窗口 + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭 frame 窗口时退出程序 + frame.setVisible(true);// 设置 frame窗口可见 + } + + + private void setFrame(){//设置窗口面板 + frame = new JFrame(); + frame.setBounds(80,80,450,650);//设置面板位置和大小 + frame.setLayout(new BorderLayout()); + frame.setTitle("简单计算器");//设置标题 + frame.setVisible(true);//设置窗口为可视 + frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);//关闭窗口时退出程序 + frame.setResizable(false);//窗口不可调整大小 + + } + + + private void setTextField()//设置文本框 + { + textField = new JTextField("0"); + textField.setBounds(50,25,400,200);// 设置文本框的位置和大小 + textField.setFont(new Font("黑体", Font.BOLD, 35));// 设置文本框字体 + frame.add(textField,BorderLayout.NORTH);//将文本框放到窗口的北面 + } + + /** + * setMyButton: + * @description: 设置按键事件 + */ + private void setButton() // 设置按钮 + { + // 按钮文本 + String[] arr ={ "C","DEL","sqrt","/", + "7","8","9","*", + "4","5","6","+", + "1","2","3","-", + "+/-","0",".","=", }; + button = new JButton[arr.length]; + panel = new JPanel(); + panel.setBounds(20, 90, 300, 280);//设置按钮的位置和大小 + panel.setLayout(new GridLayout(5, 4, 6, 6));//设置面板为网格布局 + + for(int i = 0; i < button.length; i++){ + button[i] = new JButton(arr[i]);// 创建按钮 + button[i].setFont(new Font("黑体", Font.BOLD, 20));// 设置按钮字体 + button[i].setBackground(Color.WHITE); + if(button.length - 1 == i){ //设置“=”的特殊颜色 + button[i].setBackground(Color.GRAY); + } + + + + + int event = i;// 添加事件 + // 设置鼠标监听 + button[i].addMouseListener(new MouseAdapter() {// 点击按钮 + @Override + public void mouseClicked(MouseEvent e) {//获取按钮上的内容 + click(button[event].getText()); + } + + @Override + public void mouseEntered(MouseEvent e) { // 当鼠标进入组件事件时 + button[event].setFont(new Font("黑体", Font.CENTER_BASELINE, 35)); + button[event].setBackground(new Color(240, 255, 255)); + button[event].setForeground(Color.RED); + } + + @Override + public void mouseExited(MouseEvent e) {// 当鼠标离开组件事件时 + button[event].setFont(new Font("黑体", Font.BOLD, 20)); + button[event].setBackground(Color.WHITE); + button[event].setForeground(Color.BLACK); + } + }); + + panel.add(button[i]); // 将按钮添加到面板 + } + frame.add(panel,BorderLayout.CENTER); + } + + + private void setLabel(){// 设置标签 + label = new JLabel(); + label.setText("该计算器为简单计算器,制作人:202025710419,版权归制作人所有。"); + frame.add(label,BorderLayout.SOUTH); + } + + public void click(String option){//设置点击事件 + String operator = ""; + + if("1".equals(option)) { + data += "1"; + textField.setText(data); + } + else if("2".equals(option)){ + data += "2"; + textField.setText(data); + } + else if("3".equals(option)){ + data += "3"; + textField.setText(data); + } + else if("4".equals(option)){ + data += "4"; + textField.setText(data); + } + else if("5".equals(option)){ + data += "5"; + textField.setText(data); + } + else if("6".equals(option)){ + data += "6"; + textField.setText(data); + } + else if("7".equals(option)){ + data += "7"; + textField.setText(data); + } + else if("8".equals(option)){ + data += "8"; + textField.setText(data); + } + else if("9".equals(option)){ + data += "9"; + textField.setText(data); + } + else if("0".equals(option)){ + data += "0"; + textField.setText(data); + } + else if(".".equals(option)){ + data += "."; + textField.setText(data); + } + else if("+/-".equals(option)){ + if(data.indexOf('-') < 0){ //正数 + data = "-" + data; + } + else{ // 负数 + data = data.substring(1); + } + textField.setText(data); + } + else if("sqrt".equals(option)){//开方功能 + + double data1=Double.parseDouble(data); + if(data1<0)//如果被开方数为负数 + textField.setText("error"); + else {//被开方数为正数 + curdata = Math.sqrt(data1); + String data2=String.valueOf(curdata); + textField.setText(data2); + } + } + else if("+".equals(option)){ + operator = "+"; + calculator(operator); + } + else if("-".equals(option)){ + operator = "-"; + calculator(operator); + } + else if("*".equals(option)){ + operator = "*"; + calculator(operator); + } + else if("/".equals(option)){ + operator = "/"; + calculator(operator); + } + else if("=".equals(option)){ + operator = "="; + calculator(operator); + } + + else if("C".equals(option)){ + data = ""; + isLeftAvailable = false;//删除文本框中全部内容 + textField.setText(data); + } + + else if("DEL".equals(option)){ + if(data.length() != 0){ + data = data.substring(0, data.length() - 1);//删除文本框中最后输入的内容 + } + textField.setText(data); + } + + } + + private void calculator(String operator){ + if("".equals(data)){// 如果 data 为空,不执行任何操作 + if("=".equals(operator)){// 用户只要输入 = ,无论前面的输入是否合法,结束此轮计算 + isLeftAvailable = false; + } + return; + } + + /* + * 第一次把 data 中的数据赋给 left + * 此后,每次运算都将 right 与 left 运算的结果放入 left 中,并显示 left + * 运算符 = 使用后可以重新向 left 中输入值 + * 每次获取到 data 中的值后清空 data + * + * 每次运算使用上一次传入的运算符,等号出现重新开始新的计算 + */ + + if(isLeftAvailable){ + right = Double.parseDouble(data); + data = ""; + + /* 使用"="的之前一个运算符:*/ + + if("+".equals(preOperator)){ + left += right; + } + else if("-".equals(preOperator)){ + left -= right; + } + else if("*".equals(preOperator)){ + left *= right; + } + else if("/".equals(preOperator)){ + left /= right; + } + + if(left == (int)left){// 如果运算结果为整数,就用整数输出 + left = (int)left; + } + + } + + else{ + left = Double.parseDouble(data); //清空 data + data = ""; + isLeftAvailable = true; + } + + String result = left + "";// 将运算结果转换为字符串 + + // "=" 操作符清理右操作数,重新开始计算 + if("=".equals(operator)){ + isLeftAvailable = false; + } + preOperator = operator;// 更新运算符 + textField.setText(text(result) + " " +operator); + } + + private String text(String result) { + return result; + } + + + +} diff --git a/src/java2020spring/MainClass.java b/src/java2020spring/MainClass.java new file mode 100644 index 0000000000000000000000000000000000000000..893191e43d56d88bd8a01a13442865c8593396ac --- /dev/null +++ b/src/java2020spring/MainClass.java @@ -0,0 +1,12 @@ +package java2020spring; + + +public class MainClass { + public static void main(String[] args) + { + Calculator calculator = new Calculator(); + + calculator.init(); + } + +} diff --git a/src/java2020spring/NumberButton.java b/src/java2020spring/NumberButton.java new file mode 100644 index 0000000000000000000000000000000000000000..7fcb51239a95b4b65a33ef3a31581275fa996809 --- /dev/null +++ b/src/java2020spring/NumberButton.java @@ -0,0 +1,26 @@ +package java2020spring; + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class NumberButton extends JButton{ + int number; + + public NumberButton(int number) { + super(""+number); + } + + /*public void setFont(Font font) { + // TODO 自动生成的方法存根 + + }*/ + public int getNumber() { + return number; + } + void addActionListener(OperateNumber operateNumber) { + // TODO 自动生成的方法存根 + + } + +} diff --git a/src/java2020spring/OperateBack.java b/src/java2020spring/OperateBack.java new file mode 100644 index 0000000000000000000000000000000000000000..79f7fa2807ba8525c74b719349ff5f39f82679ff --- /dev/null +++ b/src/java2020spring/OperateBack.java @@ -0,0 +1,52 @@ +package java2020spring; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.LinkedList; +import javax.swing.JTextField; + +public class OperateBack implements ActionListener{ + LinkedList list; + JTextField resultDisplay; + JTextField showProcess; + + public OperateBack(LinkedList list1, JTextField one, JTextField two) { + // TODO 自动生成的构造函数存根 + list=list1; + resultDisplay=one; + showProcess=two; + } + + public void actionPerformed(ActionEvent e) { + if(list.size()==1) { + String num=(String)list.getFirst();//获取 + if(num.length()>=1){ + num=num.substring(0,num.length()-1); + list.set(0, num); + resultDisplay.setText(""+num); + showProcess.setText(""+num); + } + else { + list.remove(); + resultDisplay.setText("0"); + showProcess.setText("0"); + } + } + else if(list.size()==3) { + String num2=(String)list.getLast(); + if(num2.length()>=1) { + num2=num2.substring(0,num2.length()-1); + list.set(0, num2); + resultDisplay.setText(""+num2); + showProcess.setText(""+num2); + } + else { + list.remove(); + resultDisplay.setText("0"); + showProcess.setText("0"); + } + + } + + } + +} diff --git a/src/java2020spring/OperateClear.java b/src/java2020spring/OperateClear.java new file mode 100644 index 0000000000000000000000000000000000000000..2678c8b0388c22db1e275b502eff030f83a20bf2 --- /dev/null +++ b/src/java2020spring/OperateClear.java @@ -0,0 +1,18 @@ +package java2020spring; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.LinkedList; +import javax.swing.JTextField; +public class OperateClear implements ActionListener{ + + public OperateClear(LinkedList list, JTextField resultDisplay, JTextField showProcess) { + // TODO 自动生成的构造函数存根 + } + + @Override + public void actionPerformed(ActionEvent e) { + // TODO 自动生成的方法存根 + + } + +} diff --git a/src/java2020spring/OperateDot.java b/src/java2020spring/OperateDot.java new file mode 100644 index 0000000000000000000000000000000000000000..b2fc8c661511419f1135006d014b6ab5b506f12d --- /dev/null +++ b/src/java2020spring/OperateDot.java @@ -0,0 +1,18 @@ +package java2020spring; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.LinkedList; +import javax.swing.JTextField; +public class OperateDot implements ActionListener{ + + public OperateDot(LinkedList list, JTextField resultDisplay, JTextField showProcess) { + // TODO 自动生成的构造函数存根 + } + + @Override + public void actionPerformed(ActionEvent e) { + // TODO 自动生成的方法存根 + + } + +} diff --git a/src/java2020spring/OperateEquality.java b/src/java2020spring/OperateEquality.java new file mode 100644 index 0000000000000000000000000000000000000000..a3bcb50b6db7357f0b6fb46ecb4d9a8900e72cfd --- /dev/null +++ b/src/java2020spring/OperateEquality.java @@ -0,0 +1,18 @@ +package java2020spring; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.LinkedList; + +import javax.swing.JTextArea; +import javax.swing.JTextField; +public class OperateEquality implements ActionListener{ + + public OperateEquality(LinkedList list, JTextField resultDisplay, JTextField showProcess, JTextArea showStep) { + // TODO 自动生成的构造函数存根 + } + + public void actionPerformed(ActionEvent e) { + + } + +} diff --git a/src/java2020spring/OperateNumber.java b/src/java2020spring/OperateNumber.java new file mode 100644 index 0000000000000000000000000000000000000000..f232d4ddaef86a7beaddc673a9e4bc8ed330e25f --- /dev/null +++ b/src/java2020spring/OperateNumber.java @@ -0,0 +1,41 @@ +package java2020spring; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.LinkedList; +import javax.swing.JTextField; +public class OperateNumber implements ActionListener{ + LinkedList list; + JTextField resultDisplay;//显示输入、输出结果 + JTextField showProcess;//显示运算过程 + + OperateNumber(LinkedList list1, JTextField one, JTextField two) { + list=list1; + resultDisplay=one; + showProcess=two; + } + + public void actionPerformed(ActionEvent e) { + NumberButton n=(NumberButton)e.getSource(); + if(list.size()==0) { + int num=n.getNumber(); + list.add(""+num); + // resultDisplay.setText(""+num)e; + } + + else if(list.size()==1) { + int num=n.getNumber(); + + + } + + else if(list.size()==2) { + + } + + else if(list.size()==3) { + + } + } + +} diff --git a/src/java2020spring/OperateSin.java b/src/java2020spring/OperateSin.java new file mode 100644 index 0000000000000000000000000000000000000000..66117a30d68dc59816874244cf84b159f1395720 --- /dev/null +++ b/src/java2020spring/OperateSin.java @@ -0,0 +1,20 @@ +package java2020spring; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.LinkedList; + +import javax.swing.JTextArea; +import javax.swing.JTextField; +public class OperateSin implements ActionListener{ + + public OperateSin(LinkedList list, JTextField resultDisplay, JTextField showProcess, JTextArea showStep) { + // TODO 自动生成的构造函数存根 + } + + @Override + public void actionPerformed(ActionEvent e) { + // TODO 自动生成的方法存根 + + } + +} diff --git a/src/java2020spring/OperateSymbol.java b/src/java2020spring/OperateSymbol.java new file mode 100644 index 0000000000000000000000000000000000000000..b6c1bd9a2c5365255a2b1202745f85727c672f9f --- /dev/null +++ b/src/java2020spring/OperateSymbol.java @@ -0,0 +1,15 @@ +package java2020spring; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.LinkedList; + +import javax.swing.JTextArea; +import javax.swing.JTextField; +public class OperateSymbol { + + public OperateSymbol(LinkedList list, JTextField resultDisplay, JTextField showProcess, JTextArea showStep) { + // TODO 自动生成的构造函数存根 + } + +} diff --git a/src/java2020spring/OperateZhengfu.java b/src/java2020spring/OperateZhengfu.java new file mode 100644 index 0000000000000000000000000000000000000000..758551a98e0fd1217c8992c6705b3764474090b6 --- /dev/null +++ b/src/java2020spring/OperateZhengfu.java @@ -0,0 +1,18 @@ +package java2020spring; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.LinkedList; +import javax.swing.JTextField; +public class OperateZhengfu implements ActionListener{ + + public OperateZhengfu(LinkedList list, JTextField resultDisplay, JTextField showProcess) { + // TODO 自动生成的构造函数存根 + } + + @Override + public void actionPerformed(ActionEvent e) { + // TODO 自动生成的方法存根 + + } + +} diff --git a/src/java2020spring/SymbolButton.java b/src/java2020spring/SymbolButton.java new file mode 100644 index 0000000000000000000000000000000000000000..47ff68393803a97916dad0b36327362a58ecec20 --- /dev/null +++ b/src/java2020spring/SymbolButton.java @@ -0,0 +1,26 @@ +package java2020spring; + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +public class SymbolButton extends JButton{ + + public SymbolButton(int i) { + // TODO 自动生成的构造函数存根 + } + + public SymbolButton(String string) { + // TODO 自动生成的构造函数存根 + } + + public void setFont(Font font) { + // TODO 自动生成的方法存根 + + } + + public void addActionListener(OperateSymbol operateSymbol) { + // TODO 自动生成的方法存根 + + } + +}