From ab045b10e1163918aaf1380b54d5e5877bab5afd Mon Sep 17 00:00:00 2001 From: lenovo Date: Tue, 7 Jun 2022 09:45:11 +0800 Subject: [PATCH 01/12] first commit --- src/java2022spring/Calculator.java | 264 +++++++++++++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100644 src/java2022spring/Calculator.java diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java new file mode 100644 index 0000000..1e1591b --- /dev/null +++ b/src/java2022spring/Calculator.java @@ -0,0 +1,264 @@ +package java2022spring; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; public class Calculator extends JFrame implements ActionListener{ + //显示窗体并居中 + public static final int FRAME_W=300; + public static final int FRAME_H=300; + public static final int SCREEN_W=Toolkit.getDefaultToolkit().getScreenSize().width; + public static final int SCREEN_H=Toolkit.getDefaultToolkit().getScreenSize().height; + + public int frame_x=(SCREEN_W-FRAME_W)/2; + public int frame_y=(SCREEN_H-FRAME_H)/2; + + //计算器功能键显示 + private final String[] KEYS= {"1","2","3","/","sqrt","4","5","6", + "*","%","7","8","9","-","1/x","0","+/-",".","+","="}; + private final String[] COMMAND= {"Backspace","CE","C"}; + private final String[] M= {" ","MC","MR","MS","M+"}; + private JButton keys[]=new JButton[KEYS.length]; + private JButton commands[]=new JButton[COMMAND.length]; + private JButton m[]=new JButton[M.length]; + private JTextField resultText=new JTextField("0"); + + //用户按的是否是整个表达式的第一个数字。或是运算符后的第一个数字 + private boolean firstDigit=true; + //计算的中间结果 + private double resultNum=0.0; + //当前运算的运算符 + private String operator="="; + //操作是否合法 + private boolean operateValidFlag=true; + + //计算器北面 + private JPanel jp_north=new JPanel(); + private JTextField input1_text=new JTextField(); + + //初始化计算器 + public void init() { + this.setTitle("vv的计算器"); + int width=0;int height=0; + this.setSize(width=400,height=300); + this.setLayout(new BorderLayout()); + this.setResizable(false); + this.setLocation(frame_x,frame_y); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + this.input1_text.setPreferredSize(new Dimension(250,30)); + jp_north.add(input1_text); + this.add(jp_north,BorderLayout.NORTH); + + + //初始化计算器上的按钮,用网络布局器,4行5列,网格之间水平方向间隔为3个像素,垂直方向间隔为3个像素 + JPanel calckeysPanel=new JPanel(); + calckeysPanel.setLayout(new GridLayout(4,5,3,3)); + for(int i=0;i= 0) { + handleNumber(label);// 用户按了数字键或者小数点键 + // handlezero(zero); + } + else { + handleOperator(label);// 用户按了运算符键 + } + } + + //从文本框中获取数字 + private double getNumberFromText() { + double result=0; + try { + result=Double.valueOf(resultText.getText()).doubleValue(); + }catch(NumberFormatException e) { + } + return result; + } + + //处理按Backspace键的事件 + private void handleBackspace() { + String text=resultText.getText(); + int i=text.length(); + if(i>0) { + text=text.substring(0,i-1);//退格,去掉文本最后一个字符 + if(text.length()==0) { + resultText.setText("0"); + firstDigit=true; + operator="=";//若文本没有内容了,就初始化计算器的各值 + } + else { + resultText.setText(text);//显示新的文本 + } + } + } + + //处理按数字键的事件 + private void handleNumber(String key) { + if(firstDigit) { + resultText.setText(key);//输入第一个数字 + } + else if((key.equals("."))&&(resultText.getText().indexOf(".")<0)) { + resultText.setText(resultText.getText()+".");//输入小数点,之前无小数点则将小数点写在文本框后面 + } + else if(!key.equals(".")) { + resultText.setText(resultText.getText()+key);//输入的不是小数点,则将数字卸载文本框后面 + } + firstDigit=false;//之后输入的就不是第一个数字了 + } + + //处理按C键的事件 + private void handleC() { + resultText.setText("0"); + firstDigit=true; + operator="=";//归零 + } + + //处理按运算键的事件 + private void handleOperator(String key) { + if (operator.equals("/")) {// 除法运算 + // 如果当前结果文本框中的值等于0 + if (getNumberFromText() == 0.0) { + operateValidFlag = false; // 操作不合法 + resultText.setText("除数不能为零"); + } + else { + resultNum /= getNumberFromText(); + } + } + else if (operator.equals("1/x")) { + // 倒数运算 + if (resultNum == 0.0) { + operateValidFlag = false;// 操作不合法 + resultText.setText("零没有倒数"); + } + else { + resultNum = 1 / resultNum; + } + } + else if (operator.equals("+")) { + // 加法运算 + resultNum += getNumberFromText(); + }else if (operator.equals("-")) { + // 减法运算 + resultNum -= getNumberFromText(); + }else if (operator.equals("*")) { + // 乘法运算 + resultNum *= getNumberFromText(); + } else if (operator.equals("sqrt")) { + // 平方根运算 + resultNum = Math.sqrt(resultNum); + } else if (operator.equals("%")) { + // 百分号运算,除以100 + resultNum = resultNum / 100; + } else if (operator.equals("+/-")) { + // 正数负数运算 + resultNum = resultNum * (-1); + } else if (operator.equals("=")) { + // 赋值运算 + resultNum = getNumberFromText(); + } + if (operateValidFlag) { + // 双精度浮点数的运算 + long t1; + double t2; + t1 = (long) resultNum; + t2 = resultNum - t1; + if (t2 == 0) { + resultText.setText(String.valueOf(t1)); + } + else { + resultText.setText(String.valueOf(resultNum)); + } + } + operator = key; + firstDigit = true; + operateValidFlag = true; // 运算符等于用户按的按钮 + } + + public Calculator() throws HeadlessException { + this.init(); + + } + + public static void main(String args[]) { + Calculator calculator1 = new Calculator(); + calculator1.setVisible(true); + calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + + + + + + + + + +} -- Gitee From 1a556f6d4bdf821076078b1c84ababebf57a2f39 Mon Sep 17 00:00:00 2001 From: lenovo Date: Tue, 7 Jun 2022 13:04:07 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index 1e1591b..e1413fe 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -4,7 +4,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Calculator extends JFrame implements ActionListener{ - //显示窗体并居中 + public static final int FRAME_W=300; public static final int FRAME_H=300; public static final int SCREEN_W=Toolkit.getDefaultToolkit().getScreenSize().width; -- Gitee From 98edbcbb6b654b7165088339e02cad3ebece8ac3 Mon Sep 17 00:00:00 2001 From: lenovo Date: Wed, 8 Jun 2022 10:56:13 +0800 Subject: [PATCH 03/12] =?UTF-8?q?5=E6=9C=8816=E6=97=A5=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E4=BA=86=E8=AE=A1=E7=AE=97=E5=99=A8=E5=9F=BA=E6=9C=AC=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E6=A1=86=E6=9E=B6=EF=BC=8C=E8=AE=BE=E7=BD=AE=E4=BA=86?= =?UTF-8?q?=E7=AA=97=E4=BD=93=E5=B9=B6=E8=AE=BE=E7=BD=AE=E4=BA=86=E7=AA=97?= =?UTF-8?q?=E4=BD=93=E7=9A=84=E9=95=BF=E5=92=8C=E5=AE=BD=EF=BC=8C=E5=B0=86?= =?UTF-8?q?=E7=AA=97=E4=BD=93=E5=B1=85=E4=B8=AD=E8=AE=BE=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E6=96=B9=E4=BE=BF=E6=89=93=E5=BC=80=E6=97=B6=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E5=B9=B6=E4=B8=8D=E9=9C=80=E8=A6=81=E8=B0=83=E6=95=B4=E7=AA=97?= =?UTF-8?q?=E4=BD=93=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 220 +---------------------------- 1 file changed, 2 insertions(+), 218 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index e1413fe..72c7c7c 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -4,7 +4,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Calculator extends JFrame implements ActionListener{ - + //显示窗体并居中 public static final int FRAME_W=300; public static final int FRAME_H=300; public static final int SCREEN_W=Toolkit.getDefaultToolkit().getScreenSize().width; @@ -13,28 +13,6 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im public int frame_x=(SCREEN_W-FRAME_W)/2; public int frame_y=(SCREEN_H-FRAME_H)/2; - //计算器功能键显示 - private final String[] KEYS= {"1","2","3","/","sqrt","4","5","6", - "*","%","7","8","9","-","1/x","0","+/-",".","+","="}; - private final String[] COMMAND= {"Backspace","CE","C"}; - private final String[] M= {" ","MC","MR","MS","M+"}; - private JButton keys[]=new JButton[KEYS.length]; - private JButton commands[]=new JButton[COMMAND.length]; - private JButton m[]=new JButton[M.length]; - private JTextField resultText=new JTextField("0"); - - //用户按的是否是整个表达式的第一个数字。或是运算符后的第一个数字 - private boolean firstDigit=true; - //计算的中间结果 - private double resultNum=0.0; - //当前运算的运算符 - private String operator="="; - //操作是否合法 - private boolean operateValidFlag=true; - - //计算器北面 - private JPanel jp_north=new JPanel(); - private JTextField input1_text=new JTextField(); //初始化计算器 public void init() { @@ -46,202 +24,8 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im this.setLocation(frame_x,frame_y); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - this.input1_text.setPreferredSize(new Dimension(250,30)); - jp_north.add(input1_text); - this.add(jp_north,BorderLayout.NORTH); - - - //初始化计算器上的按钮,用网络布局器,4行5列,网格之间水平方向间隔为3个像素,垂直方向间隔为3个像素 - JPanel calckeysPanel=new JPanel(); - calckeysPanel.setLayout(new GridLayout(4,5,3,3)); - for(int i=0;i= 0) { - handleNumber(label);// 用户按了数字键或者小数点键 - // handlezero(zero); - } - else { - handleOperator(label);// 用户按了运算符键 - } - } - //从文本框中获取数字 - private double getNumberFromText() { - double result=0; - try { - result=Double.valueOf(resultText.getText()).doubleValue(); - }catch(NumberFormatException e) { - } - return result; - } - - //处理按Backspace键的事件 - private void handleBackspace() { - String text=resultText.getText(); - int i=text.length(); - if(i>0) { - text=text.substring(0,i-1);//退格,去掉文本最后一个字符 - if(text.length()==0) { - resultText.setText("0"); - firstDigit=true; - operator="=";//若文本没有内容了,就初始化计算器的各值 - } - else { - resultText.setText(text);//显示新的文本 - } - } - } - - //处理按数字键的事件 - private void handleNumber(String key) { - if(firstDigit) { - resultText.setText(key);//输入第一个数字 - } - else if((key.equals("."))&&(resultText.getText().indexOf(".")<0)) { - resultText.setText(resultText.getText()+".");//输入小数点,之前无小数点则将小数点写在文本框后面 - } - else if(!key.equals(".")) { - resultText.setText(resultText.getText()+key);//输入的不是小数点,则将数字卸载文本框后面 - } - firstDigit=false;//之后输入的就不是第一个数字了 - } - - //处理按C键的事件 - private void handleC() { - resultText.setText("0"); - firstDigit=true; - operator="=";//归零 - } - - //处理按运算键的事件 - private void handleOperator(String key) { - if (operator.equals("/")) {// 除法运算 - // 如果当前结果文本框中的值等于0 - if (getNumberFromText() == 0.0) { - operateValidFlag = false; // 操作不合法 - resultText.setText("除数不能为零"); - } - else { - resultNum /= getNumberFromText(); - } - } - else if (operator.equals("1/x")) { - // 倒数运算 - if (resultNum == 0.0) { - operateValidFlag = false;// 操作不合法 - resultText.setText("零没有倒数"); - } - else { - resultNum = 1 / resultNum; - } - } - else if (operator.equals("+")) { - // 加法运算 - resultNum += getNumberFromText(); - }else if (operator.equals("-")) { - // 减法运算 - resultNum -= getNumberFromText(); - }else if (operator.equals("*")) { - // 乘法运算 - resultNum *= getNumberFromText(); - } else if (operator.equals("sqrt")) { - // 平方根运算 - resultNum = Math.sqrt(resultNum); - } else if (operator.equals("%")) { - // 百分号运算,除以100 - resultNum = resultNum / 100; - } else if (operator.equals("+/-")) { - // 正数负数运算 - resultNum = resultNum * (-1); - } else if (operator.equals("=")) { - // 赋值运算 - resultNum = getNumberFromText(); - } - if (operateValidFlag) { - // 双精度浮点数的运算 - long t1; - double t2; - t1 = (long) resultNum; - t2 = resultNum - t1; - if (t2 == 0) { - resultText.setText(String.valueOf(t1)); - } - else { - resultText.setText(String.valueOf(resultNum)); - } - } - operator = key; - firstDigit = true; - operateValidFlag = true; // 运算符等于用户按的按钮 - } - + public Calculator() throws HeadlessException { this.init(); -- Gitee From 8b5f74d6c3a1717631f21539649fec73bcee2b3a Mon Sep 17 00:00:00 2001 From: lenovo Date: Wed, 8 Jun 2022 23:11:34 +0800 Subject: [PATCH 04/12] =?UTF-8?q?5=E6=9C=8817=E6=97=A5=E8=87=B319=E6=97=A5?= =?UTF-8?q?=EF=BC=8C=E5=B0=86=E8=AE=A1=E7=AE=97=E5=99=A8=E7=9A=84=E5=8C=97?= =?UTF-8?q?=E9=9D=A2=E8=AE=BE=E7=BD=AE=E5=A5=BD=EF=BC=8C=E5=B9=B6=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=95=BF=E5=AE=BD=E4=B8=BA250=E5=92=8C30=EF=BC=9B?= =?UTF-8?q?=E5=BB=BA=E7=AB=8B=E4=BA=86=E5=A4=A7=E9=9D=A2=E6=9D=BF=EF=BC=8C?= =?UTF-8?q?=E8=BF=90=E7=94=A8=E8=BE=B9=E7=95=8C=E5=B8=83=E5=B1=80=E7=AE=A1?= =?UTF-8?q?=E7=90=86=EF=BC=8C=E5=86=8D=E5=BB=BA=E7=AB=8B=E4=BA=86=E7=94=BB?= =?UTF-8?q?=E6=9D=BF=E6=94=BE=E6=96=87=E6=9C=AC=E6=A1=86=EF=BC=9B=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E4=BA=86=E6=95=B4=E4=BD=93=E5=B8=83=E5=B1=80=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index 72c7c7c..a64793d 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -13,6 +13,10 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im public int frame_x=(SCREEN_W-FRAME_W)/2; public int frame_y=(SCREEN_H-FRAME_H)/2; + + //计算器北面 + private JPanel jp_north=new JPanel(); + private JTextField input1_text=new JTextField(); //初始化计算器 public void init() { @@ -24,8 +28,30 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im this.setLocation(frame_x,frame_y); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.input1_text.setPreferredSize(new Dimension(250,30)); + jp_north.add(input1_text); + this.add(jp_north,BorderLayout.NORTH); + + + +//计算器的整体布局,将calckeys和command面板放在计算器的中部 + //新建大面板,将command和calckeys画板放在该画板内 + JPanel panel1=new JPanel(); + //画板采用边界布局管理,画板内组件之间水平和垂直方向间隔为3像素 + panel1.setLayout(new BorderLayout(3,3)); + + + //建立一个画板放文本框 + JPanel top=new JPanel(); + top.setLayout(new BorderLayout()); - + + //整体布局 + getContentPane().setLayout(new BorderLayout(3, 5)); + getContentPane().add("North", top); + getContentPane().add("Center", panel1); + } + public Calculator() throws HeadlessException { this.init(); -- Gitee From 96d2f0fdc6703e6f9e6664daee03212d68c1066a Mon Sep 17 00:00:00 2001 From: lenovo Date: Wed, 8 Jun 2022 23:47:26 +0800 Subject: [PATCH 05/12] =?UTF-8?q?5=E6=9C=8820=E6=97=A5=E8=87=B35=E6=9C=882?= =?UTF-8?q?1=E6=97=A5=E8=AE=BE=E7=BD=AE=E4=BA=86=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E5=99=A8=E7=9A=84=E5=8A=9F=E8=83=BD=E9=94=AE=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E7=94=A8=E7=BD=91=E6=A0=BC=E5=B8=83=E5=B1=80=E5=99=A8=EF=BC=88?= =?UTF-8?q?4=E8=A1=8C5=E5=88=97=EF=BC=89=E5=B0=86=E6=8C=89=E9=92=AE?= =?UTF-8?q?=EF=BC=88KEYS=EF=BC=89=E6=94=BE=E5=85=A5=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E5=99=A8=E4=B8=8A=EF=BC=9B=E8=AE=BE=E7=BD=AE=E4=BA=86=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E7=9A=84=E4=BA=8B=E4=BB=B6=E7=9B=91=E5=90=AC=E5=99=A8?= =?UTF-8?q?=EF=BC=8C=E4=B8=BA=E4=B8=8B=E4=B8=80=E6=AD=A5=E5=81=9A=E5=87=86?= =?UTF-8?q?=E5=A4=87=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 41 +++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index a64793d..2c7fa8c 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -13,6 +13,16 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im public int frame_x=(SCREEN_W-FRAME_W)/2; public int frame_y=(SCREEN_H-FRAME_H)/2; + //计算器功能键显示 + private final String[] KEYS= {"1","2","3","/","sqrt","4","5","6", + "*","%","7","8","9","-","1/x","0","+/-",".","+","="}; + private final String[] COMMAND= {"Backspace","CE","C"}; + private final String[] M= {" ","MC","MR","MS","M+"}; + private JButton keys[]=new JButton[KEYS.length]; + private JButton commands[]=new JButton[COMMAND.length]; + private JButton m[]=new JButton[M.length]; + private JTextField resultText=new JTextField("0"); + //计算器北面 private JPanel jp_north=new JPanel(); @@ -33,6 +43,15 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im this.add(jp_north,BorderLayout.NORTH); + //初始化计算器上的按钮,用网络布局器,4行5列,网格之间水平方向间隔为3个像素,垂直方向间隔为3个像素 + JPanel calckeysPanel=new JPanel(); + calckeysPanel.setLayout(new GridLayout(4,5,3,3)); + for(int i=0;i Date: Thu, 9 Jun 2022 10:14:47 +0800 Subject: [PATCH 06/12] =?UTF-8?q?5=E6=9C=8822=E6=97=A5=EF=BC=8C=E7=94=A8?= =?UTF-8?q?=E7=BD=91=E6=A0=BC=E5=B8=83=E5=B1=80=E5=B0=86=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E5=99=A8=E7=9A=84=E5=8A=9F=E8=83=BD=E9=94=AE=E5=92=8Cm?= =?UTF-8?q?=E9=94=AE=E6=8E=92=E5=88=97=E5=A5=BD=E6=94=BE=E5=85=A5=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E5=99=A8=EF=BC=9B=E8=AE=BE=E7=BD=AE=E4=BA=86=E5=90=8E?= =?UTF-8?q?=E7=BB=AD=E5=A4=84=E7=90=86=E4=BA=8B=E4=BB=B6=E8=A6=81=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E5=87=BD=E6=95=B0=EF=BC=8C=E5=B9=B6=E6=94=BE?= =?UTF-8?q?=E5=9C=A8=E4=B8=80=E4=B8=AA=E6=96=B9=E6=B3=95=E4=B8=AD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 58 +++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index 2c7fa8c..ed2b564 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -23,7 +23,15 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im private JButton m[]=new JButton[M.length]; private JTextField resultText=new JTextField("0"); - + //用户按的是否是整个表达式的第一个数字。或是运算符后的第一个数字 + private boolean firstDigit=true; + //计算的中间结果 + private double resultNum=0.0; + //当前运算的运算符 + private String operator="="; + //操作是否合法 + private boolean operateValidFlag=true; + //计算器北面 private JPanel jp_north=new JPanel(); private JTextField input1_text=new JTextField(); @@ -52,13 +60,32 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im keys[i].setForeground(Color.blue); } - + //文本框里右对齐 + resultText.setHorizontalAlignment(JTextField.RIGHT); + //初始化功能键,用网络布局器,1行3列,网格之间水平方向间隔为3个像素,垂直方向间隔为3个像素 + JPanel commandsPanel=new JPanel(); + commandsPanel.setLayout(new GridLayout(1,3,3,3)); + for(int i=0;i= 0) { + handleNumber(label);// 用户按了数字键或者小数点键 + // handlezero(zero); + } + else { + handleOperator(label);// 用户按了运算符键 + } + } + public Calculator() throws HeadlessException { this.init(); -- Gitee From ca3a017262ec68b3f87473f518f7de1c257088a2 Mon Sep 17 00:00:00 2001 From: lenovo Date: Thu, 9 Jun 2022 10:37:48 +0800 Subject: [PATCH 07/12] =?UTF-8?q?5=E6=9C=8823=E6=97=A5=E8=87=B324=E6=97=A5?= =?UTF-8?q?=EF=BC=8C=E5=86=99=E4=BA=86=E5=A4=84=E7=90=86=E6=8C=89Backspace?= =?UTF-8?q?=E9=94=AE=E3=80=81C=E9=94=AE=E5=92=8C=E6=95=B0=E5=AD=97?= =?UTF-8?q?=E9=94=AE=E4=BA=8B=E4=BB=B6=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index ed2b564..b38ffec 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -132,6 +132,46 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im } } + + //处理按Backspace键的事件 + private void handleBackspace() { + String text=resultText.getText(); + int i=text.length(); + if(i>0) { + text=text.substring(0,i-1);//退格,去掉文本最后一个字符 + if(text.length()==0) { + resultText.setText("0"); + firstDigit=true; + operator="=";//若文本没有内容了,就初始化计算器的各值 + } + else { + resultText.setText(text);//显示新的文本 + } + } + } + + //处理按C键的事件 + private void handleC() { + resultText.setText("0"); + firstDigit=true; + operator="=";//归零 + } + + //处理按数字键的事件 + private void handleNumber(String key) { + if(firstDigit) { + resultText.setText(key);//输入第一个数字 + } + else if((key.equals("."))&&(resultText.getText().indexOf(".")<0)) { + resultText.setText(resultText.getText()+".");//输入小数点,之前无小数点则将小数点写在文本框后面 + } + else if(!key.equals(".")) { + resultText.setText(resultText.getText()+key);//输入的不是小数点,则将数字卸载文本框后面 + } + firstDigit=false;//之后输入的就不是第一个数字了 + } + + public Calculator() throws HeadlessException { this.init(); -- Gitee From a5a76c6975e7b3f725e05137efc9d5a61d7cd3df Mon Sep 17 00:00:00 2001 From: lenovo Date: Thu, 9 Jun 2022 11:24:38 +0800 Subject: [PATCH 08/12] =?UTF-8?q?5=E6=9C=8826=E6=97=A5=E8=87=B327=E6=97=A5?= =?UTF-8?q?=EF=BC=8C=E7=A0=94=E7=A9=B6=E5=B9=B6=E6=B7=BB=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E5=A4=84=E7=90=86=E9=83=A8=E5=88=86=E8=BF=90=E7=AE=97=E9=94=AE?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95=EF=BC=9A=E5=88=86=E5=BC=8F=E3=80=81?= =?UTF-8?q?=E5=8A=A0=E5=87=8F=E6=B3=95=EF=BC=8C=E9=99=A4=E6=B3=95=E4=B8=AD?= =?UTF-8?q?=E5=88=86=E6=AF=8D=E4=B8=8D=E8=83=BD=E4=B8=BA=E9=9B=B6=E7=9A=84?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=87=BD=E6=95=B0=EF=BC=8C=E4=B8=94=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=BA=86=E4=BB=8E=E6=96=87=E6=9C=AC=E6=A1=86=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=95=B0=E5=AD=97=E7=9A=84=E6=96=B9=E6=B3=95=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E6=8C=89=E8=BF=90=E7=AE=97=E7=AC=A6=E6=97=B6=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E8=AE=A9=E6=96=87=E6=9C=AC=E6=A1=86=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E8=BF=90=E7=AE=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 45 ++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index b38ffec..a67678d 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -171,8 +171,49 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im firstDigit=false;//之后输入的就不是第一个数字了 } - - + + //处理按运算键的事件 + private void handleOperator(String key) { + if (operator.equals("/")) {// 除法运算 + // 如果当前结果文本框中的值等于0 + if (getNumberFromText() == 0.0) { + operateValidFlag = false; // 操作不合法 + resultText.setText("除数不能为零"); + } + else { + resultNum /= getNumberFromText(); + } + } + else if (operator.equals("1/x")) { + // 倒数运算 + if (resultNum == 0.0) { + operateValidFlag = false;// 操作不合法 + resultText.setText("零没有倒数"); + } + else { + resultNum = 1 / resultNum; + } + } + else if (operator.equals("+")) { + // 加法运算 + resultNum += getNumberFromText(); + }else if (operator.equals("-")) { + // 减法运算 + resultNum -= getNumberFromText(); + } + } + + //从文本框中获取数字 + private double getNumberFromText() { + double result=0; + try { + result=Double.valueOf(resultText.getText()).doubleValue(); + }catch(NumberFormatException e) { + } + return result; + } + + public Calculator() throws HeadlessException { this.init(); -- Gitee From a83315f70db1347f9a400c66540fb30c0abea103 Mon Sep 17 00:00:00 2001 From: lenovo Date: Thu, 9 Jun 2022 11:33:27 +0800 Subject: [PATCH 09/12] =?UTF-8?q?5=E6=9C=8828=E6=97=A5=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=BA=86=E4=B9=98=E6=B3=95=E8=BF=90=E7=AE=97=E5=92=8C?= =?UTF-8?q?=E5=B9=B3=E6=96=B9=E6=A0=B9=E8=BF=90=E7=AE=97=E7=9A=84=E5=87=BD?= =?UTF-8?q?=E6=95=B0=EF=BC=8C=E5=B9=B6=E5=86=99=E4=BA=86=E5=A6=82=E4=BD=95?= =?UTF-8?q?=E8=BF=90=E7=AE=97=E7=BB=93=E6=9E=9C=EF=BC=88=E8=B5=8B=E5=80=BC?= =?UTF-8?q?=E8=BF=90=E7=AE=97=EF=BC=89=E7=9A=84=E5=87=BD=E6=95=B0=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E8=AE=A1=E7=AE=97=E5=99=A8=E8=83=BD=E5=B0=86=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E5=86=99=E7=9A=84=E8=BF=90=E7=AE=97=E9=94=AE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=AE=9E=E7=8E=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index a67678d..dee086a 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -197,11 +197,29 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im else if (operator.equals("+")) { // 加法运算 resultNum += getNumberFromText(); - }else if (operator.equals("-")) { + } + else if (operator.equals("-")) { // 减法运算 resultNum -= getNumberFromText(); } - } + else if (operator.equals("*")) { + // 乘法运算 + resultNum *= getNumberFromText(); + } + else if (operator.equals("sqrt")) { + // 平方根运算 + resultNum = Math.sqrt(resultNum); + } + + else if (operator.equals("=")) { + // 赋值运算(运算结果) + resultNum = getNumberFromText(); + } + + operator = key; + firstDigit = true; + operateValidFlag = true; // 运算符等于用户按的按钮 + } //从文本框中获取数字 private double getNumberFromText() { -- Gitee From d8e617b9196734c6fbcae84fe3bfd293c63510d6 Mon Sep 17 00:00:00 2001 From: lenovo Date: Thu, 9 Jun 2022 12:05:40 +0800 Subject: [PATCH 10/12] =?UTF-8?q?5=E6=9C=8829=E8=87=B331=E6=97=A5=EF=BC=8C?= =?UTF-8?q?=E5=B0=86=E5=B9=B3=E6=96=B9=E6=A0=B9=E8=BF=90=E7=AE=97=E3=80=81?= =?UTF-8?q?=E7=99=BE=E5=88=86=E5=8F=B7=E8=BF=90=E7=AE=97=E3=80=81=E6=AD=A3?= =?UTF-8?q?=E6=95=B0=E8=B4=9F=E6=95=B0=E8=BF=90=E7=AE=97=E5=92=8C=E5=B0=8F?= =?UTF-8?q?=E6=95=B0=E8=BF=90=E7=AE=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index dee086a..7cf5e85 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -210,12 +210,31 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im // 平方根运算 resultNum = Math.sqrt(resultNum); } - + else if (operator.equals("%")) { + // 百分号运算(除以100) + resultNum = resultNum / 100; + } + else if (operator.equals("+/-")) { + // 正数负数运算 + resultNum = resultNum * (-1); + } else if (operator.equals("=")) { - // 赋值运算(运算结果) + // 赋值运算 resultNum = getNumberFromText(); } - + if (operateValidFlag) { + // 双精度浮点数的运算 + long t1; + double t2; + t1 = (long) resultNum; + t2 = resultNum - t1; + if (t2 == 0) { + resultText.setText(String.valueOf(t1)); + } + else { + resultText.setText(String.valueOf(resultNum)); + } + } operator = key; firstDigit = true; operateValidFlag = true; // 运算符等于用户按的按钮 -- Gitee From 6760fda2822504393097c7ff9deeb387d615d48d Mon Sep 17 00:00:00 2001 From: lenovo Date: Thu, 9 Jun 2022 12:07:30 +0800 Subject: [PATCH 11/12] =?UTF-8?q?5=E6=9C=8829=E6=97=A5=E8=87=B330=E6=97=A5?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=BA=86=E7=99=BE=E5=88=86=E5=8F=B7?= =?UTF-8?q?=E8=BF=90=E7=AE=97=E3=80=81=E6=AD=A3=E8=B4=9F=E6=95=B0=E8=BF=90?= =?UTF-8?q?=E7=AE=97=E5=92=8C=E5=B0=8F=E6=95=B0=E8=BF=90=E7=AE=97=EF=BC=8C?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E6=A0=87=E5=87=86=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E5=99=A8=E7=9A=84=E6=89=80=E6=9C=89=E8=BF=90=E7=AE=97=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index 7cf5e85..5ac11f6 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -211,7 +211,7 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im resultNum = Math.sqrt(resultNum); } else if (operator.equals("%")) { - // 百分号运算(除以100) + // 百分号运算(除以100 resultNum = resultNum / 100; } else if (operator.equals("+/-")) { -- Gitee From c5c070b64b859e20ca28fff939fdf10cfdf56125 Mon Sep 17 00:00:00 2001 From: lenovo Date: Thu, 9 Jun 2022 12:09:09 +0800 Subject: [PATCH 12/12] =?UTF-8?q?5=E6=9C=8829=E6=97=A5=E8=87=B330=E6=97=A5?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=BA=86=E7=99=BE=E5=88=86=E5=8F=B7?= =?UTF-8?q?=E8=BF=90=E7=AE=97=E3=80=81=E6=AD=A3=E8=B4=9F=E6=95=B0=E8=BF=90?= =?UTF-8?q?=E7=AE=97=E5=92=8C=E5=B0=8F=E6=95=B0=E8=BF=90=E7=AE=97=EF=BC=8C?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E6=A0=87=E5=87=86=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E5=99=A8=E7=9A=84=E6=89=80=E6=9C=89=E8=BF=90=E7=AE=97=E7=AC=A6?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index 5ac11f6..7cf5e85 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -211,7 +211,7 @@ import java.awt.event.ActionListener; public class Calculator extends JFrame im resultNum = Math.sqrt(resultNum); } else if (operator.equals("%")) { - // 百分号运算(除以100 + // 百分号运算(除以100) resultNum = resultNum / 100; } else if (operator.equals("+/-")) { -- Gitee