From 16828bd878a519acddc68019d2f850d72891805e Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Thu, 19 May 2022 22:20:35 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E7=A1=AE=E5=AE=9A=E6=A0=87=E5=87=86?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=99=A8=E5=92=8C=E7=A7=91=E5=AD=A6=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E5=99=A8=E7=9A=84=E7=AA=97=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Biaozhun.java | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/java2022spring/Biaozhun.java diff --git a/src/java2022spring/Biaozhun.java b/src/java2022spring/Biaozhun.java new file mode 100644 index 0000000..e5848e4 --- /dev/null +++ b/src/java2022spring/Biaozhun.java @@ -0,0 +1,50 @@ +package java2022spring; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +@SupperssWarnings("serial") +public class Biaozhun extends JFrame implements ActionListener{ + private final String[] KEYS= {"*","/","7","8","9","+","4","5","6","-","1","2","3","%", + "%","0",".","=" + }; + private final String[]COMMAND= {"Back","C"}; + private JButton keys[]=new JButton[KEYS.length]; + private JButton commands[]=new JButton[COMMAND.length]; + private JTextField resultText =new JTextField("0"); + private boolean firstDigit=true; + private double resultNum=0.0; + private String operator="="; + private boolean operateValidFlag=true; + StringBuffer sb=new StringBuffer(); + String v1=null; + public Biaozhun() { + setTitle("标准计算器"); + this.setBackground(Color.LIGHT_GRAY); + this.setTitle("标准计算器"); + this.setLocation(600,400); + this.setSize(600,600); + this.setResizable(false); + JMenuBar menuBar=new JMenuBar(); + setJMenuBar(menuBar); + JMenu menu=new JMenu("功能"); + JMenuItem menuItem=new JMenuItem("标准计算器"); + menu.add(menuItem); + JMenuItem menuItem_1=new JMenuItem("科学计算器"); + menu.add(menuItem_1); + menuItem_1.addActionListener(new ActionListener() { + public void actionPerformed() { + actionPerformed(ActionEvent arg[]){ + Kexue science=new Kexue(); + science.setVisible(true); + } + } + }); + } + + + public static void main(String[] args) { + // TODO 自动生成的方法存根 + + } + +} -- Gitee From f2110b6718428808688776c5181d4e3f53a60369 Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Thu, 19 May 2022 22:28:49 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E5=88=9D=E5=AE=9A=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E5=99=A8=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Biaozhun.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/java2022spring/Biaozhun.java b/src/java2022spring/Biaozhun.java index e5848e4..c0f36ae 100644 --- a/src/java2022spring/Biaozhun.java +++ b/src/java2022spring/Biaozhun.java @@ -38,7 +38,8 @@ public class Biaozhun extends JFrame implements ActionListener{ science.setVisible(true); } } - }); + ); + } -- Gitee From e8b63f15875df0e14aea0b2717864de8e80eb4e7 Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Mon, 30 May 2022 21:29:42 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E6=A0=87=E5=87=86=E8=AE=A1=E7=AE=97=E5=99=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Biaozhun.java | 157 ++++++++++++++++++++++++++++--- 1 file changed, 145 insertions(+), 12 deletions(-) diff --git a/src/java2022spring/Biaozhun.java b/src/java2022spring/Biaozhun.java index c0f36ae..40e3bb1 100644 --- a/src/java2022spring/Biaozhun.java +++ b/src/java2022spring/Biaozhun.java @@ -2,9 +2,9 @@ package java2022spring; import java.awt.*; import java.awt.event.*; import javax.swing.*; -@SupperssWarnings("serial") +@SuppressWarnings("serial") public class Biaozhun extends JFrame implements ActionListener{ - private final String[] KEYS= {"*","/","7","8","9","+","4","5","6","-","1","2","3","%", + private final String[] KEYS= {"*","/","7","8","9","+","4","5","6","-","1","2","3","|x|", "%","0",".","=" }; private final String[]COMMAND= {"Back","C"}; @@ -19,11 +19,12 @@ public class Biaozhun extends JFrame implements ActionListener{ String v1=null; public Biaozhun() { setTitle("标准计算器"); - this.setBackground(Color.LIGHT_GRAY); + this.setBackground(Color.red); this.setTitle("标准计算器"); this.setLocation(600,400); this.setSize(600,600); this.setResizable(false); + JMenuBar menuBar=new JMenuBar(); setJMenuBar(menuBar); JMenu menu=new JMenu("功能"); @@ -32,19 +33,151 @@ public class Biaozhun extends JFrame implements ActionListener{ JMenuItem menuItem_1=new JMenuItem("科学计算器"); menu.add(menuItem_1); menuItem_1.addActionListener(new ActionListener() { - public void actionPerformed() { - actionPerformed(ActionEvent arg[]){ - Kexue science=new Kexue(); - science.setVisible(true); - } - } + public void actionPerformed(ActionEvent arg0) { + Kexue science = new Kexue(); + science.setVisible(true); + } + } ); - + resultText.setHorizontalAlignment(JTextField.RIGHT); + resultText.setBackground(Color.gray); + resultText.setFont(new Font("TimesRoman",Font.BOLD,46)); + JPanel PPanel = new JPanel(); + PPanel.setLayout(new GridLayout(5, 4, 3, 3)); + for (int i = 0; i < COMMAND.length; i++) { + commands[i] = new JButton(COMMAND[i]); + PPanel.add(commands[i]); + commands[i].setFont(new Font("Courir",Font.PLAIN,20)); + } + for (int i = 0; i < KEYS.length; i++) { + keys[i] = new JButton(KEYS[i]); + PPanel.add(keys[i]); + keys[i].setFont(new Font("Courir",Font.ITALIC,20)); + } + JPanel panel1 = new JPanel(); + panel1.setLayout(new BorderLayout(3,3)); + panel1.add("Center", PPanel); + JPanel top = new JPanel(); + top.setLayout(new BorderLayout()); + top.add("Center", resultText); + getContentPane().setLayout(new BorderLayout(3,5)); + getContentPane().add("North",top); + getContentPane().add("Center",panel1); + for(int i=0;i= 0) { + handleNumber1(label); + } + else + handleOperator(label); + } + private void handleBack1() { + 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 handleNumber1(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; + } + + private void handleC1() { + resultText.setText("0"); + firstDigit = true; + operator = "="; + } + + private void handleOperator(String key) { + if (operator.equals("/")) { + if (getNumberFromText() == 0.0) { + operateValidFlag = false; + resultText.setText("除数不能为零"); + } + else + resultNum /= getNumberFromText();} + else if(operator.equals("%")) { + resultNum=resultNum*0.01; + } + + + else if (operator.equals("+")) { + resultNum += getNumberFromText(); + } + else if (operator.equals("-")) { + resultNum -= getNumberFromText(); + } + else if (operator.equals("*")) { + resultNum *= getNumberFromText(); + } + else if (operator.equals("|x|")) { + resultNum = Math.abs(resultNum); + } + 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; + } + private double getNumberFromText() { + double result=0; + try { + result=Double.valueOf(resultText.getText()).doubleValue(); + } + catch (NumberFormatException e) {} + return result; + } + public static void main(String[] args) { - // TODO 自动生成的方法存根 + Biaozhun application=new Biaozhun(); + application.setVisible(true); + application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // TODO 自动生成的方法存根 } -- Gitee From 64c5d99fbf0bf218a09f0f405c79ad1dc09bcae3 Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Sun, 5 Jun 2022 15:52:01 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E6=A0=87=E5=87=86=E8=AE=A1=E7=AE=97=E5=99=A8=E5=92=8C=E7=A7=91?= =?UTF-8?q?=E5=AD=A6=E8=AE=A1=E7=AE=97=E5=99=A8=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=86=E4=B8=80=E7=82=B9=E7=82=B9=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Biaozhun.java | 140 +++++++++++++++++++++---------- 1 file changed, 94 insertions(+), 46 deletions(-) diff --git a/src/java2022spring/Biaozhun.java b/src/java2022spring/Biaozhun.java index 40e3bb1..4a7eeff 100644 --- a/src/java2022spring/Biaozhun.java +++ b/src/java2022spring/Biaozhun.java @@ -2,36 +2,49 @@ package java2022spring; import java.awt.*; import java.awt.event.*; import javax.swing.*; -@SuppressWarnings("serial") public class Biaozhun extends JFrame implements ActionListener{ - private final String[] KEYS= {"*","/","7","8","9","+","4","5","6","-","1","2","3","|x|", + private final String[] KEYS= {"*","/","7","8","9","+","4","5","6","-","1","2","3","1/X", "%","0",".","=" - }; + };//创建对象KEYS字符串数组 + private JButton keys[]=new JButton[KEYS.length]; + //给KEYS对象创建相应的窗口按钮 private final String[]COMMAND= {"Back","C"}; - private JButton keys[]=new JButton[KEYS.length]; + //创建对象command数组 private JButton commands[]=new JButton[COMMAND.length]; - private JTextField resultText =new JTextField("0"); + //声明command窗口按钮 + private JTextField textresult =new JTextField("0"); + //计算的初始值为0 private boolean firstDigit=true; + //保证可以输入数字 private double resultNum=0.0; + //初始值为0 private String operator="="; + //声明操作对象并初始化 private boolean operateValidFlag=true; - StringBuffer sb=new StringBuffer(); - String v1=null; + //操作是否合法 + StringBuffer bz=new StringBuffer(); + String v1=null; + public Biaozhun() { setTitle("标准计算器"); - this.setBackground(Color.red); - this.setTitle("标准计算器"); - this.setLocation(600,400); + this.setLocation(500,50); this.setSize(600,600); this.setResizable(false); - + //确定窗口大小,出现的位置和标题 JMenuBar menuBar=new JMenuBar(); setJMenuBar(menuBar); - JMenu menu=new JMenu("功能"); + JMenu menu=new JMenu("切换为科学计算器"); + //设置菜单栏 + menuBar.add(menu); + menuBar.setBackground(new Color(230,240,250)); + menu.setForeground(Color.BLUE); + menu.setFont(new Font("Courir",Font.ITALIC,20)); + //修改菜单栏颜色、字体和大小 JMenuItem menuItem=new JMenuItem("标准计算器"); menu.add(menuItem); JMenuItem menuItem_1=new JMenuItem("科学计算器"); menu.add(menuItem_1); + //菜单栏设立两个选项 menuItem_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { Kexue science = new Kexue(); @@ -39,27 +52,40 @@ public class Biaozhun extends JFrame implements ActionListener{ } } ); - resultText.setHorizontalAlignment(JTextField.RIGHT); - resultText.setBackground(Color.gray); - resultText.setFont(new Font("TimesRoman",Font.BOLD,46)); + //创建监听器监听Kexue类获得的值 + textresult.setHorizontalAlignment(JTextField.RIGHT); + //使得到的值出现在显示框的右边 + textresult.setBackground(new Color(180,200,220)); + //调节文本框的背景颜色 + textresult.setForeground(Color.blue); + //调节字体颜色 + textresult.setFont(new Font("Courir",Font.ITALIC,50)); JPanel PPanel = new JPanel(); + //创建一个新的面板 PPanel.setLayout(new GridLayout(5, 4, 3, 3)); for (int i = 0; i < COMMAND.length; i++) { commands[i] = new JButton(COMMAND[i]); PPanel.add(commands[i]); - commands[i].setFont(new Font("Courir",Font.PLAIN,20)); + commands[i].setFont(new Font("Courir",Font.ITALIC,25)); + commands[i].setBackground(new Color(50,150,250)); + //利用new color(int,int,int)进行调色,增加局面美感 } + for (int i = 0; i < KEYS.length; i++) { keys[i] = new JButton(KEYS[i]); PPanel.add(keys[i]); - keys[i].setFont(new Font("Courir",Font.ITALIC,20)); + keys[i].setFont(new Font("Courir",Font.ITALIC,25)); + keys[i].setBackground(Color.cyan); } + //用两个for 循环分别将两个对象数组添加到按钮中 + JPanel panel1 = new JPanel(); panel1.setLayout(new BorderLayout(3,3)); panel1.add("Center", PPanel); + //将创建的面板在窗口上有方向的排放 JPanel top = new JPanel(); top.setLayout(new BorderLayout()); - top.add("Center", resultText); + top.add("Center", textresult); getContentPane().setLayout(new BorderLayout(3,5)); getContentPane().add("North",top); getContentPane().add("Center",panel1); @@ -70,9 +96,11 @@ public class Biaozhun extends JFrame implements ActionListener{ for(int i=0;i= 0) { + else if ("0123456789.".indexOf(label) >= 0) { handleNumber1(label); + //将监听器获取的值复制到显示屏上面 + } else handleOperator(label); + //否则为操作符 } - private void handleBack1() { - String text = resultText.getText(); + private void handleBack1() + //当监听到back时,将获取的值推后一个数值,利用if语句 + { + String text = textresult.getText(); int i = text.length(); if (i > 0) { text = text.substring(0, i - 1); if (text.length() == 0) { - resultText.setText("0"); + textresult.setText("0"); firstDigit = true; operator = "="; } else - resultText.setText(text); + textresult.setText(text); } } - - private void handleNumber1(String key) { + //当监听到back时,将获取的值推后一个数值,利用if语句 + private void handleNumber1(String key) + //使用监听器获取点击到的数值 + { if (firstDigit) { - resultText.setText(key); + textresult.setText(key); } - else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) { - resultText.setText(resultText.getText() + "."); + else if ((key.equals(".")) && (textresult.getText().indexOf(".") < 0)) { + textresult.setText(textresult.getText() + "."); } else if (!key.equals(".")) { - resultText.setText(resultText.getText() + key); + textresult.setText(textresult.getText() + key); } + //使点击的数值连续出现在显示屏上面 firstDigit = false; } + //操作符前面的数字删除,显示后面监听到的数值 - private void handleC1() { - resultText.setText("0"); + private void handleC1() + //当获取的值为C时,将显示屏清零,结果返回初始值 + { + textresult.setText("0"); firstDigit = true; operator = "="; } - private void handleOperator(String key) { + private void handleOperator(String key) + //不同操作符下operator的结果及一些特殊条件限制 + { if (operator.equals("/")) { if (getNumberFromText() == 0.0) { operateValidFlag = false; - resultText.setText("除数不能为零"); + textresult.setText("除数不能为零"); } else resultNum /= getNumberFromText();} @@ -142,22 +183,28 @@ public class Biaozhun extends JFrame implements ActionListener{ else if (operator.equals("*")) { resultNum *= getNumberFromText(); } - else if (operator.equals("|x|")) { - resultNum = Math.abs(resultNum); - } + else if (operator.equals("1/X")) { + if (resultNum == 0.0) { + operateValidFlag = false; + textresult.setText("零没有倒数"); + } + else + resultNum = 1 / resultNum; + } else if (operator.equals("=")) { resultNum = getNumberFromText(); } + //不同操作符下operator的结果及一些特殊条件限制 if (operateValidFlag) { - long t1; - double t2; + long t1;//运算符之前获取的数值 + double t2;//运算符之后获取的数值 t1 = (long) resultNum; t2 = resultNum - t1; if (t2 == 0) { - resultText.setText(String.valueOf(t1)); - } + textresult.setText(String.valueOf(t1)); + }//将值复制到显示屏上面 else { - resultText.setText(String.valueOf(resultNum)); + textresult.setText(String.valueOf(resultNum)); } } operator = key; @@ -167,15 +214,16 @@ public class Biaozhun extends JFrame implements ActionListener{ private double getNumberFromText() { double result=0; try { - result=Double.valueOf(resultText.getText()).doubleValue(); + result=Double.valueOf(textresult.getText()).doubleValue(); } catch (NumberFormatException e) {} return result; + //利用try-catch语句获取result } public static void main(String[] args) { - Biaozhun application=new Biaozhun(); - application.setVisible(true); + Biaozhun application=new Biaozhun();//声明标准计算器 + application.setVisible(true);//窗口可见 application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // TODO 自动生成的方法存根 -- Gitee From d4874d71e48b006b6c44ce918b7347acbb0c2206 Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Sun, 5 Jun 2022 16:00:49 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E7=A7=91=E5=AD=A6=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E5=99=A8(=E4=B9=8B=E5=89=8D=E4=B8=80=E7=9B=B4=E6=B2=A1?= =?UTF-8?q?=E6=9C=89push=E5=88=B0=EF=BC=8C=E9=87=8D=E6=96=B0=E6=8F=90?= =?UTF-8?q?=E4=BA=A4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Biaozhun.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/java2022spring/Biaozhun.java b/src/java2022spring/Biaozhun.java index 4a7eeff..31ac35d 100644 --- a/src/java2022spring/Biaozhun.java +++ b/src/java2022spring/Biaozhun.java @@ -23,6 +23,7 @@ public class Biaozhun extends JFrame implements ActionListener{ private boolean operateValidFlag=true; //操作是否合法 StringBuffer bz=new StringBuffer(); + //字符串容量可变 String v1=null; public Biaozhun() { -- Gitee From 0497715a84f9b6d9e181c214a90194fe511ba641 Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Sun, 5 Jun 2022 16:15:47 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Biaozhun.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/java2022spring/Biaozhun.java b/src/java2022spring/Biaozhun.java index 31ac35d..7a607ca 100644 --- a/src/java2022spring/Biaozhun.java +++ b/src/java2022spring/Biaozhun.java @@ -197,6 +197,7 @@ public class Biaozhun extends JFrame implements ActionListener{ } //不同操作符下operator的结果及一些特殊条件限制 if (operateValidFlag) { + //双精度浮点数运算 long t1;//运算符之前获取的数值 double t2;//运算符之后获取的数值 t1 = (long) resultNum; @@ -208,11 +209,12 @@ public class Biaozhun extends JFrame implements ActionListener{ textresult.setText(String.valueOf(resultNum)); } } - operator = key; + operator = key;//运算符对于用户按得按钮 firstDigit = true; operateValidFlag = true; } private double getNumberFromText() { + //从文本框获取数字 double result=0; try { result=Double.valueOf(textresult.getText()).doubleValue(); -- Gitee From 887eb994131f33d6e628276e4a1a525c3a026b21 Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Sun, 5 Jun 2022 16:43:11 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E4=B9=8B=E5=89=8D=E4=B8=8D=E7=9F=A5?= =?UTF-8?q?=E9=81=93=E4=B8=BA=E4=BB=80=E4=B9=88=E8=BF=99=E4=B8=AA=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=80=E7=9B=B4=E6=8F=90=E4=BA=A4=E4=B8=8D=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Biaozhun.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java2022spring/Biaozhun.java b/src/java2022spring/Biaozhun.java index 7a607ca..19dc3a8 100644 --- a/src/java2022spring/Biaozhun.java +++ b/src/java2022spring/Biaozhun.java @@ -210,7 +210,7 @@ public class Biaozhun extends JFrame implements ActionListener{ } } operator = key;//运算符对于用户按得按钮 - firstDigit = true; + firstDigit = true;//确保运算符前面是数字 operateValidFlag = true; } private double getNumberFromText() { -- Gitee From a850c1a388812cfd8a6d1820cbb73287edf20a45 Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Sun, 5 Jun 2022 16:52:28 +0800 Subject: [PATCH 08/13] =?UTF-8?q?Kexue=E8=BF=99=E4=B8=AA=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=B8=8D=E4=B8=8A=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Biaozhun.java | 2 +- src/java2022spring/Kexue.java | 308 +++++++++++++++++++++++++++++++ 2 files changed, 309 insertions(+), 1 deletion(-) create mode 100644 src/java2022spring/Kexue.java diff --git a/src/java2022spring/Biaozhun.java b/src/java2022spring/Biaozhun.java index 19dc3a8..34cab62 100644 --- a/src/java2022spring/Biaozhun.java +++ b/src/java2022spring/Biaozhun.java @@ -211,7 +211,7 @@ public class Biaozhun extends JFrame implements ActionListener{ } operator = key;//运算符对于用户按得按钮 firstDigit = true;//确保运算符前面是数字 - operateValidFlag = true; + operateValidFlag = true;//确保操作合理 } private double getNumberFromText() { //从文本框获取数字 diff --git a/src/java2022spring/Kexue.java b/src/java2022spring/Kexue.java new file mode 100644 index 0000000..8b2c8cc --- /dev/null +++ b/src/java2022spring/Kexue.java @@ -0,0 +1,308 @@ +package java2022spring; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +@SuppressWarnings("serial") +public class Kexue extends JFrame implements ActionListener { + private final String[] KEYS = { "*","/","7","8","9","+","4","5","6","-","1","2","3","1/X", + "%","0",".","=" }; + private final String[] COMMAND = { "Back", "C" }; + private JButton keys[] = new JButton[KEYS.length]; + private JButton commands[] = new JButton[COMMAND.length]; + private JTextField resultText = new JTextField("0"); +//初始值结果 + private boolean firstDigit = true; + //保证可以输入数字 + private double resultNum = 0.0; + private String operator = "="; + //声明操作符为= + private boolean operateValidFlag = true; + //操作是否合法 + private final String[] KEYS2= {"X^2","X^3","X^Y","Sqrt","rad","X!","ln","lg","|X|","sin","cos","tan","PI","e","e^X"}; + //创建含有科学计算符合的字符串数组 + private JButton keys2[]=new JButton[KEYS2.length]; + StringBuffer kx = new StringBuffer(); + //使创建的数组容量可以改变 + String vl = null; + private JPanel contentPane,contentpane2; + //创建两个控制面板 + + private FlowLayout layout; + //确定科学计算器布局 + public Kexue() + { + super("科学计算器"); + //创建科学计算器构造函数 + this.setTitle("科学计算器"); + this.setSize(800, 500); + //确定窗口大小和标题 + JMenuBar menuBar = new JMenuBar(); + //设置菜单栏 + setJMenuBar(menuBar); + JMenu menu = new JMenu("切换为标准计算器"); + menuBar.add(menu); + menuBar.setBackground(new Color(250,240,230)); + menu.setForeground(Color.RED); + menu.setFont(new Font("Courir",Font.ITALIC,20)); + //修改菜单栏颜色字体及大小 + JMenuItem menuItem = new JMenuItem("标准计算器"); + menu.add(menuItem); + JMenuItem menuItem_1 = new JMenuItem("科学计算器"); + menu.add(menuItem_1); + //设置标准和科学两个选项 + menuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + Biaozhun ordinary = new Biaozhun(); + ordinary.setVisible(true); + } + } + ); + //创建监听器监听标准计算器获取的值 + + resultText.setHorizontalAlignment(JTextField.RIGHT); + //输入的结果出现在显示屏的右边 + resultText.setBackground(new Color(250,240,240)); + resultText.setForeground(Color.red); + resultText.setFont(new Font("Courir",Font.ITALIC,50)); + //显示屏的背景颜色及文本的颜色和字体格式,大小 + JPanel PPanel=new JPanel();//创建新的面板 + PPanel.setLayout(new GridLayout(5, 4, 3, 3));//确定按钮布局 + for (int i = 0; i < COMMAND.length; i++) { + commands[i] = new JButton(COMMAND[i]); + PPanel.add(commands[i]); + commands[i].setFont(new Font("Courir",Font.ITALIC,25)); + commands[i].setBackground(new Color(230,150,150)); + } + for (int i = 0; i < KEYS.length; i++) { + keys[i] = new JButton(KEYS[i]); + PPanel.add(keys[i]); + keys[i].setFont(new Font("Courir",Font.ITALIC,25)); + keys[i].setBackground(new Color(250,200,200)); + } + //用for循环语句将数组内容复制到按钮上 + JPanel panel1 = new JPanel(); + //初始化功能键,将功能键放在一个面板上 + panel1.setLayout(new BorderLayout(3,3)); + panel1.add("Center", PPanel); + JPanel top = new JPanel(); + top.setLayout(new BorderLayout()); + top.add("Center", resultText); + contentPane=new JPanel(); + contentPane.setLayout(new BorderLayout(3, 5)); + contentPane.add("North", top); + contentPane.add("Center", panel1); + //创建新的面板作为显示框,布局在最上方 + JPanel ppanel=new JPanel(); + ppanel.setLayout(new GridLayout(5, 3, 3, 3)); + for (int i = 0; i < KEYS2.length; i++) { + keys2[i] = new JButton(KEYS2[i]); + ppanel.add(keys2[i]); + keys2[i].setFont(new Font("Courir",Font.ITALIC,25)); + keys2[i].setBackground(new Color(250,220,240)); + } + //确定字符串数组keys中字符串的字体大小和按钮背景颜色 + contentpane2 = new JPanel(); + contentpane2.setLayout(new BorderLayout(3, 5)); + //构造新边框布局 + contentpane2.add("Center", ppanel); + layout=new FlowLayout(); + JPanel ane= new JPanel(); + ane.setLayout(layout); + getContentPane().setLayout(new BorderLayout(3,5)); + getContentPane().add("Center", contentPane); + getContentPane().add("East", contentpane2); + //将创建的面板进行布局 + for (int i = 0; i < KEYS.length; i++) { + keys[i].addActionListener(this); + } + for (int i = 0; i < COMMAND.length; i++) { + commands[i].addActionListener(this); + } + for (int i = 0; i < KEYS2.length; i++) + keys2[i].addActionListener(this); + setVisible(true); + } + //创建监听器监听窗口上面所有按钮的获取的数值 + public void actionPerformed(ActionEvent e) + //创建监听器,监听command按钮和keys按钮上面的值 + { + String label = e.getActionCommand(); + if (label.equals(COMMAND[0])) { + handleBack(); + } + //用户按了Back键 + else if (label.equals(COMMAND[1])) { + handleC(); + } + //用户按了C键 + else if ("0123456789.".indexOf(label) >= 0) { + handleNumber(label); + } + //用户按了数字键 + else if(label.equals("PI")) + resultText.setText(String.valueOf(3.14159265)); + else if(label.equals("e")) + resultText.setText(String.valueOf(2.17828)); + else + handleOperator(label); + } + + //将监听器获取的值复制到显示屏上面 + private void handleBack() + //当监听到back时,将获取的值推后一个数值,利用if语句 + { + 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; + }//操作符前面的数字删除,显示后面监听到的数值 + private void handleC() { + resultText.setText("0"); + firstDigit = true; + operator = "="; + } //当获取的值为C时,将显示屏清零,结果返回初始值 + + private void handleOperator(String key) + //不同操作符下operator的结果及一些特殊条件限制 + { + if (operator.equals("/")) { + if (getNumberFromText() == 0.0) { + operateValidFlag = false; + resultText.setText("除数不能为零"); + } + else + resultNum /= getNumberFromText(); + + } + else if (operator.equals("+")) { + resultNum += getNumberFromText(); + } + else if (operator.equals("-")) { + resultNum -= getNumberFromText(); + } + else if (operator.equals("*")) { + resultNum *= getNumberFromText(); + } + else if (operator.equals("1/X")) { + if (resultNum == 0.0) { + operateValidFlag = false; + resultText.setText("零没有倒数"); + } + else + resultNum = 1 / resultNum; + } + else if (operator.equals("X^2")) { + resultNum = resultNum*resultNum; + } + else if (operator.equals("X^3")) { + resultNum = resultNum*resultNum*resultNum; + } + else if (operator.equals("X^Y")) { + resultNum = Math.pow(resultNum,getNumberFromText()); + } + else if (operator.equals("Sqrt")) { + resultNum = Math.sqrt(resultNum); + } + else if (operator.equals("rad")) { + resultNum = resultNum*57.3; + } + else if (operator.equals("X!")) { + int ee; + double re=resultNum ; + int c=1; + for(ee=1;ee<=re;ee++) + { + c=c*ee; + resultNum=c;} + } + else if (operator.equals("ln")) { + resultNum = Math.log(resultNum); + } + else if (operator.equals("lg")) { + resultNum = Math.log10(resultNum); + } + else if (operator.equals("|x|")) { + resultNum = Math.abs(resultNum); + }else if (operator.equals("sin")) { + resultNum = Math.sin(resultNum); + } + else if (operator.equals("cos")) { + resultNum = Math.cos(resultNum); + } + else if (operator.equals("tan")) { + resultNum = Math.tan(resultNum); + } + else if (operator.equals("e^X")) { + resultNum = Math.exp(resultNum); + } + 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; + } + //可以输入数值,操作规范 + + private double getNumberFromText() { + //从运算符获取结果 + double result = 0; + try { + result = Double.valueOf(resultText.getText()).doubleValue(); + } catch (NumberFormatException e) {} + return result; + } + //利用try-catch语句获取result + public static void main(String args[]) { + EventQueue.invokeLater(new Runnable() { + public void run() { + try { + Kexue application = new Kexue(); + application.setVisible(true); + + } catch (Exception e) { + e.printStackTrace(); + } + } + } + ); + } + + } \ No newline at end of file -- Gitee From e5863a3fdc48be98f424ff35488e57211af2ae35 Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Sun, 5 Jun 2022 17:46:27 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Biaozhun.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/java2022spring/Biaozhun.java b/src/java2022spring/Biaozhun.java index 34cab62..1d1baed 100644 --- a/src/java2022spring/Biaozhun.java +++ b/src/java2022spring/Biaozhun.java @@ -135,6 +135,14 @@ public class Biaozhun extends JFrame implements ActionListener{ } } //当监听到back时,将获取的值推后一个数值,利用if语句 + + private void handleC1() + //当获取的值为C时,将显示屏清零,结果返回初始值 + { + textresult.setText("0"); + firstDigit = true; + operator = "="; + } private void handleNumber1(String key) //使用监听器获取点击到的数值 { @@ -152,14 +160,6 @@ public class Biaozhun extends JFrame implements ActionListener{ } //操作符前面的数字删除,显示后面监听到的数值 - private void handleC1() - //当获取的值为C时,将显示屏清零,结果返回初始值 - { - textresult.setText("0"); - firstDigit = true; - operator = "="; - } - private void handleOperator(String key) //不同操作符下operator的结果及一些特殊条件限制 { -- Gitee From 2de5afb4b4f644a1ff2739986e253c99f1afb626 Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Sun, 5 Jun 2022 18:29:34 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E4=B8=8B?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Biaozhun.java | 2 +- src/java2022spring/Kexue.java | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/java2022spring/Biaozhun.java b/src/java2022spring/Biaozhun.java index 1d1baed..3d27e8e 100644 --- a/src/java2022spring/Biaozhun.java +++ b/src/java2022spring/Biaozhun.java @@ -221,7 +221,7 @@ public class Biaozhun extends JFrame implements ActionListener{ } catch (NumberFormatException e) {} return result; - //利用try-catch语句获取result + //利用try-catch语句获取result,防止丢异常 } public static void main(String[] args) { diff --git a/src/java2022spring/Kexue.java b/src/java2022spring/Kexue.java index 8b2c8cc..58f83f3 100644 --- a/src/java2022spring/Kexue.java +++ b/src/java2022spring/Kexue.java @@ -275,9 +275,9 @@ public class Kexue extends JFrame implements ActionListener { //显示新的文本 } } - operator = key; - firstDigit = true; - operateValidFlag = true; + operator = key;//运算符对于用户点击的按钮 + firstDigit = true;//第一个输入为数字 + operateValidFlag = true;//操作合法 } //可以输入数值,操作规范 @@ -292,9 +292,11 @@ public class Kexue extends JFrame implements ActionListener { //利用try-catch语句获取result public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { + //eventqueue.invokelater()可以使方法调用完毕后被销毁,释放节省内存空间 public void run() { try { - Kexue application = new Kexue(); + //防止丢异常 + Kexue application = new Kexue();//内部类创建科学计算器对象 application.setVisible(true); } catch (Exception e) { -- Gitee From bf0c31409d517dc4da2c42cec4cd62c96de31c1b Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Sun, 5 Jun 2022 18:57:56 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E4=B8=80=E7=82=B9=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Kexue.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/java2022spring/Kexue.java b/src/java2022spring/Kexue.java index 58f83f3..c95a09b 100644 --- a/src/java2022spring/Kexue.java +++ b/src/java2022spring/Kexue.java @@ -9,6 +9,7 @@ public class Kexue extends JFrame implements ActionListener { private final String[] COMMAND = { "Back", "C" }; private JButton keys[] = new JButton[KEYS.length]; private JButton commands[] = new JButton[COMMAND.length]; + //与标准计算器一样的按键,创建过程一致 private JTextField resultText = new JTextField("0"); //初始值结果 private boolean firstDigit = true; -- Gitee From 6fbe6401fd92a88fd2d638ee7e565f492c020cf4 Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Sun, 5 Jun 2022 19:01:05 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E5=AF=B9=E5=A4=9A=E4=BD=99=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=BF=9B=E8=A1=8C=E5=88=A0=E5=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Kexue.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/java2022spring/Kexue.java b/src/java2022spring/Kexue.java index c95a09b..7086fee 100644 --- a/src/java2022spring/Kexue.java +++ b/src/java2022spring/Kexue.java @@ -24,7 +24,6 @@ public class Kexue extends JFrame implements ActionListener { private JButton keys2[]=new JButton[KEYS2.length]; StringBuffer kx = new StringBuffer(); //使创建的数组容量可以改变 - String vl = null; private JPanel contentPane,contentpane2; //创建两个控制面板 -- Gitee From f3f55af50bea596241fc4a63d295c7cc625dba6e Mon Sep 17 00:00:00 2001 From: 86159 <86159@LAPTOP-RQM35V3B> Date: Sun, 5 Jun 2022 19:04:57 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E4=B8=80=E7=82=B9?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Biaozhun.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/java2022spring/Biaozhun.java b/src/java2022spring/Biaozhun.java index 3d27e8e..4be3b6e 100644 --- a/src/java2022spring/Biaozhun.java +++ b/src/java2022spring/Biaozhun.java @@ -23,10 +23,9 @@ public class Biaozhun extends JFrame implements ActionListener{ private boolean operateValidFlag=true; //操作是否合法 StringBuffer bz=new StringBuffer(); - //字符串容量可变 - String v1=null; - + //字符串容量可变 public Biaozhun() { + //构造函数,确定标准计算器 setTitle("标准计算器"); this.setLocation(500,50); this.setSize(600,600); -- Gitee