diff --git a/src/java2022spring/Cal.java b/src/java2022spring/Cal.java new file mode 100644 index 0000000000000000000000000000000000000000..1656f3ce3b681f93520f043fe5d89d5382f13de0 --- /dev/null +++ b/src/java2022spring/Cal.java @@ -0,0 +1,10 @@ +package java2022spring; + +import javax.swing.JFrame; +import java.awt.*; + +import javax.naming.InitialContext; +import javax.swing.*; +public class Cal extends JFrame{ + +} diff --git a/src/java2022spring/CalculatorListener.java b/src/java2022spring/CalculatorListener.java new file mode 100644 index 0000000000000000000000000000000000000000..2a3d55ea4a4e2fdbc421687c3430667f552d48e8 --- /dev/null +++ b/src/java2022spring/CalculatorListener.java @@ -0,0 +1,143 @@ +package java2022spring; + +import java.awt.Button; +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JButton; + +public class CalculatorListener implements ActionListener{ + CalculatorWindow window; + double number1,number2; + String fuhao,operator; + String Number1,Number2; + String Result; + String MS; + Double ms=0.0; + + public void setWindow(CalculatorWindow window) { + this.window=window; + } + + public void actionPerformed(ActionEvent e) { + String se=""; + if(window.jTextField.getText().length()>=1) {//条件参考网络 + //提取文本框前length-1位字符 + se=window.jTextField.getText().substring(0, window.jTextField.getText().length()-1); + } + + String ss=e.getActionCommand(); + if(".0123456789".indexOf(ss)!=-1)//方法参考网络 + window.jTextField.setText(window.jTextField.getText()+ss);//输入数字 + else if(ss.equals("+")||ss.equals("-")||ss.equals("*")||ss.equals("/")) { + fuhao=ss; + Number1=window.jTextField.getText(); + window.jTextField.setText(""); + } + else if(ss.equals("%")||ss.equals("^2")||ss.equals("√")||ss.equals("1/x")) { + fuhao=ss; + Number1=window.jTextField.getText(); + } + else if(ss.equals("=")){ + calculate();//等号则计算 + } + else if(ss.equals("←")) { + backspace(se); + } + else if(ss.equals("CE")) { + ce_clear(); + } + else if(ss.equals("C")) { + c_clear(); + } + else if(ss.equals("MS")) { + ms=Double.parseDouble(window.jTextField.getText()); + window.jTextField2.setText("M"+"="+ms);//输出储存于提示文本框 + } + else if(ss.equals("MR")) { + window.jTextField.setText(String.valueOf(ms)); + } + else if(ss.equals("M+")) { + MS=window.jTextField.getText(); + ms+=Double.parseDouble(MS); + window.jTextField2.setText("M"+"="+ms); + } + else if(ss.equals("M-")){ + MS=window.jTextField.getText(); + ms-=Double.parseDouble(MS); + window.jTextField2.setText("M"+"="+ms); + } + else if(ss.equals("MC")) { + ms=0.0; + window.jTextField2.setText(""); + } + } + + void calculate() { + Double number1=Double.parseDouble(Number1); + Double result=0.0; + if(fuhao.equals("+")||fuhao.equals("-")||fuhao.equals("*")||fuhao.equals("/")) { + Double number2=Double.parseDouble(window.jTextField.getText()); + switch (fuhao) {//分支实现不同符号的计算方法 + case"+": + result=number1+number2; + break; + case"-": + result=number1-number2; + break; + case"*": + result=number1*number2; + break; + case"/": + result=number1/number2; + if(fuhao.equals("/")) {//除数不为0处理 + if(number2==0) { + window.jTextField2.setText("除数不能为0!"); + } + } + break; + default:window.jTextField.setText("请输入正确的数据!"); + } + } + else if(fuhao.equals("%")||fuhao.equals("^2")||fuhao.equals("√")||fuhao.equals("1/x")) { + switch(fuhao) {//分支实现不同符号的计算方法 + case"%": + result=number1/100; + break; + case"x^2": + result=number1*number1; + break; + case"√": + result=Math.sqrt(number1); + break; + case"1/x": + result=1/number1; + if(fuhao.equals("1/x")) {//分母不为0处理 + if (number1==0) { + window.jTextField2.setText("倒数分母不能为0!"); + } + } + break; + default:window.jTextField.setText("请输入正确的数据!"); + } + } + + String Result=String.valueOf(result);//将double型转化成String型 + window.jTextField.setText(Result);//输出结果 + } + + public void ce_clear() {//CE方法 + window.jTextField.setText(""); + } + + public void c_clear() {//C方法 + window.jTextField.setText(""); + window.jTextField2.setText(""); + ms=0.0; + } + + public void backspace(String se) {//退位方法 + window.jTextField.setText(se); + } +} + diff --git a/src/java2022spring/CalculatorWindow.java b/src/java2022spring/CalculatorWindow.java new file mode 100644 index 0000000000000000000000000000000000000000..25babba0fc458cb6a9a47060b0d0c98856d74108 --- /dev/null +++ b/src/java2022spring/CalculatorWindow.java @@ -0,0 +1,111 @@ +package java2022spring; + +import java.awt.*; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; + +public class CalculatorWindow extends JFrame{ + JTextField jTextField=new JTextField(20);//创建文本框,显示数据的输入与输出 + JTextField jTextField2=new JTextField(10);//创建文本框,输出提示 + Panel panel1;//用于放置按钮 + Panel panel2;//用于放置显示文本框和提示文本框 + Panel panelCenter;//用于放置数字与符号按钮 + Panel panelNorth;//用于放置清除按钮 + Panel panelWest;//用于放置功能按钮 + CalculatorListener listener; + +//创建数字键0-9、符号和小数点键 + String Keys[]= {"1/x","1","2","3","+","%","4","5","6","-","^2","7","8","9","*","√",".","0","=","/"}; + JButton jb[]=new JButton[Keys.length]; +//创建清除键 + String qcKeys[]= {"←","C","CE"}; + JButton qcjb[]=new JButton[qcKeys.length]; +//创建功能键 + String gnKeys[]= {"MC","MR","MS","M+","M-"}; + JButton gnjb[]=new JButton[gnKeys.length]; + + public CalculatorWindow() { + setVisible(true);//设置窗口可见 + setBounds(500,200,500,400);//设置窗口位置和大小 + setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//设置窗口关闭形式 + setResizable(false);//固定窗口大小 + setBackground(Color.gray); + tjsz(); + tjjtq(); + } + + void tjjtq() {//将button添加为事件源 + listener=new CalculatorListener(); + listener.setWindow(this); + for (int i = 0; i < jb.length; i++) { + jb[i].addActionListener(listener); + } + for (int i = 0; i < qcjb.length; i++) { + qcjb[i].addActionListener(listener); + } + for (int i = 0; i < gnjb.length; i++) { + gnjb[i].addActionListener(listener); + } + + } + + void tjsz() { +//添加面板1,用于放置数字和清除按钮 + panel1=new Panel(); + panel1.setLayout(new BorderLayout()); + add(panel1,BorderLayout.CENTER);//位于窗口中心 + panel1.setPreferredSize(new Dimension(350,300));//设置大小 +//添加面板2,用于放置显示文本框和提示文本框 + panel2=new Panel(); + panel2.setLayout(new BorderLayout()); + add(panel2,BorderLayout.NORTH);//位于窗口北面 + panel2.add(jTextField,BorderLayout.CENTER);//显示文本框 + panel2.add(jTextField2,BorderLayout.NORTH);//提示文本框 + panel2.setPreferredSize(new Dimension(500,90));//设置大小 + jTextField.setPreferredSize(new Dimension(500,40)); + jTextField2.setPreferredSize(new Dimension(500,40)); + jTextField.setHorizontalAlignment(jTextField.RIGHT);//显示文本框右对齐 + jTextField.setFont(new Font("宋体", Font.BOLD, 30));//设置字体 + jTextField2.setHorizontalAlignment(jTextField.RIGHT);//提示文本框右对齐 + jTextField2.setFont(new Font("微软雅黑", Font.BOLD, 13));//设置字体 +//西面面板,放置功能按钮 + panelWest=new Panel(); + panelWest.setLayout(new GridLayout(5,1)); + add(panelWest,BorderLayout.WEST);//位于窗口西面 + panelWest.setPreferredSize(new Dimension(80,300)); + for(int i=0;i