From 8a4e711023de3e800ea5e131538da26995474ea3 Mon Sep 17 00:00:00 2001 From: Administrator Date: Mon, 7 Jun 2021 23:00:43 +0800 Subject: [PATCH 1/7] =?UTF-8?q?6=E6=9C=887=E6=97=A5=EF=BC=8C=E5=9F=BA?= =?UTF-8?q?=E6=9C=AC=E5=AE=8C=E6=88=90=E7=95=8C=E9=9D=A2=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/Calculator.java | 17 +++++++++++++++++ src/java2020spring/MainClass.java | 11 +++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/java2020spring/Calculator.java create mode 100644 src/java2020spring/MainClass.java diff --git a/src/java2020spring/Calculator.java b/src/java2020spring/Calculator.java new file mode 100644 index 0000000..042f4ae --- /dev/null +++ b/src/java2020spring/Calculator.java @@ -0,0 +1,17 @@ +package java2020spring; +import java.awt.*; +import javax.swing.*; + +public class Calculator extends JFrame{ + JTextField wenbenkuang; + +public void Calculator(){ + init(); + setVisible(true); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +} + +void init() { + +} +} diff --git a/src/java2020spring/MainClass.java b/src/java2020spring/MainClass.java new file mode 100644 index 0000000..a3ca64f --- /dev/null +++ b/src/java2020spring/MainClass.java @@ -0,0 +1,11 @@ +package java2020spring; + +public class MainClass { + + public static void main(String[] args) { + Calculator calculator=new Calculator(); + calculator.setBounds(200,150,400,400); + calculator.setTitle(""); + } + +} -- Gitee From 875d00d334ff960357482aca8c32f8ef4366e6aa Mon Sep 17 00:00:00 2001 From: Administrator Date: Mon, 7 Jun 2021 23:03:02 +0800 Subject: [PATCH 2/7] =?UTF-8?q?6=E6=9C=887=E6=97=A5=EF=BC=8C=E5=9F=BA?= =?UTF-8?q?=E6=9C=AC=E5=AE=8C=E6=88=90=E7=95=8C=E9=9D=A2=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E3=80=82=EF=BC=88=E5=88=9A=E6=89=8D=E5=8F=91=E9=94=99=E4=BA=86?= =?UTF-8?q?=EF=BC=8C=E8=BF=99=E4=B8=AA=E6=89=8D=E6=98=AF=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/MyCalculator_version2.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/java2020spring/MyCalculator_version2.java diff --git a/src/java2020spring/MyCalculator_version2.java b/src/java2020spring/MyCalculator_version2.java new file mode 100644 index 0000000..7f550d9 --- /dev/null +++ b/src/java2020spring/MyCalculator_version2.java @@ -0,0 +1,65 @@ +package java2020spring; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.GridLayout; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; +import javax.swing.JTextField; +import javax.swing.JButton; + +public class MyCalculator_version2 extends JFrame { + + private JPanel contentPane; + private JTextField textField; + String []labels= {"%","√","x²","1/x","CE","C","delete", + "÷","7","8","9","×","4","5","6","-","1","2","3", + "+","±","0",".","="}; + JButton buttons[]=new JButton[labels.length]; + + public static void main(String[] args) { + EventQueue.invokeLater(new Runnable() { + public void run() { + try { + MyCalculator_version2 frame = new MyCalculator_version2(); + frame.setVisible(true); + frame.setTitle("会开心的计算器"); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + + public MyCalculator_version2() { + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setBounds(100, 100, 384, 351); + contentPane = new JPanel(); + contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); + contentPane.setLayout(new BorderLayout(0, 0)); + setContentPane(contentPane); + + textField = new JTextField(); + contentPane.add(textField, BorderLayout.NORTH); + textField.setColumns(10); + textField.setPreferredSize(new Dimension(400,50)); + textField.setHorizontalAlignment(textField.RIGHT);//设置文本框右对齐 + + Color pink=new Color(248,235,216); + + JPanel panel_buttons = new JPanel(); + contentPane.add(panel_buttons, BorderLayout.CENTER); + panel_buttons.setLayout(new GridLayout(6,4,7,7)); + for(int i=0;i Date: Tue, 8 Jun 2021 21:30:03 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E9=99=A4=E4=BA=86CE=E9=94=AE=EF=BC=8C?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E6=AF=8F=E4=B8=AA=E9=94=AE=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E9=83=BD=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/MyCalculator_version2.java | 169 +++++++++++++++++- 1 file changed, 162 insertions(+), 7 deletions(-) diff --git a/src/java2020spring/MyCalculator_version2.java b/src/java2020spring/MyCalculator_version2.java index 7f550d9..2a41531 100644 --- a/src/java2020spring/MyCalculator_version2.java +++ b/src/java2020spring/MyCalculator_version2.java @@ -5,6 +5,9 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.GridLayout; +import java.awt.event.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.swing.JFrame; import javax.swing.JPanel; @@ -12,14 +15,18 @@ import javax.swing.border.EmptyBorder; import javax.swing.JTextField; import javax.swing.JButton; -public class MyCalculator_version2 extends JFrame { + +public class MyCalculator_version2 extends JFrame implements ActionListener,KeyListener { private JPanel contentPane; - private JTextField textField; + private JTextField textField;//最上面那个文本框 String []labels= {"%","√","x²","1/x","CE","C","delete", "÷","7","8","9","×","4","5","6","-","1","2","3", - "+","±","0",".","="}; - JButton buttons[]=new JButton[labels.length]; + "+","±","0",".","="};//按钮的名字们 + JButton buttons[]=new JButton[labels.length];//按钮们 + private boolean firstDigit=true;//输入数字的时候用到 + private String operation=null;//做运算的时候用到 + Double num1,num2;//把要运算的两个数放在这两个变量里 public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @@ -37,6 +44,7 @@ public class MyCalculator_version2 extends JFrame { public MyCalculator_version2() { + setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 384, 351); contentPane = new JPanel(); @@ -45,12 +53,12 @@ public class MyCalculator_version2 extends JFrame { setContentPane(contentPane); textField = new JTextField(); - contentPane.add(textField, BorderLayout.NORTH); + contentPane.add(textField, BorderLayout.NORTH);//把文本框加到面板上去 textField.setColumns(10); textField.setPreferredSize(new Dimension(400,50)); - textField.setHorizontalAlignment(textField.RIGHT);//设置文本框右对齐 + textField.setHorizontalAlignment(JTextField.RIGHT);//设置文本框右对齐 - Color pink=new Color(248,235,216); + Color pink=new Color(248,235,216);//选一个颜色叭 JPanel panel_buttons = new JPanel(); contentPane.add(panel_buttons, BorderLayout.CENTER); @@ -60,6 +68,153 @@ public class MyCalculator_version2 extends JFrame { panel_buttons.add(buttons[i]); buttons[i].setBackground(pink); } + for(int i=0;i= 0) { + if(firstDigit==true) { + textField.setText(str); + } + else if(str=="."&&textField.getText().indexOf(".")<0) { + textField.setText(textField.getText()+str); + } + else if(str!="."){ + textField.setText(textField.getText()+str); + } + firstDigit=false; + } + + //加减乘除 + else if("+-×÷".indexOf(str)>=0) { + //if(textField.getText().indexOf("0123456789")<0) { + //} + if(operation==null) { + num1=Double.valueOf(textField.getText()); + textField.setText(null);//或者可以直接调用前面写好的clean() + operation=str; + } + } + + //等于号 + else if(str=="=") { + if(text==null) { + num2=0.0; + } + else { + num2=Double.valueOf(text); + } + if(operation=="+") { + num1=num1+num2; + textField.setText(String.format("%.3f", num1)); + } + if(operation=="-") { + num1=num1-num2; + textField.setText(String.format("%.3f", num1)); + } + if(operation=="×") { + num1=num1*num2; + textField.setText(String.format("%.3f", num1)); + } + if(operation=="÷") { + if(num2!=0.0) { + num1=num1/num2; + textField.setText(String.format("%.3f", num1)); + } + else{ + textField.setText("零不能做除数"); + } + } + operation=null; + } + + //正负号 + else if(str.equals(labels[20])){ + Double before=Double.parseDouble(text); + before=-before; + textField.setText(String.valueOf(before)); + } + } + + + public void keyTyped(KeyEvent e) {} + public void keyReleased(KeyEvent e) {} + public void keyPressed(KeyEvent e) { + } } -- Gitee From 2b2bc22712dd54eaa14195633b5742dc36406f0d Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 9 Jun 2021 13:37:00 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86CE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E8=BF=98=E5=9C=A8=E5=AE=8C=E5=96=84=E4=B8=AD?= =?UTF-8?q?...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/MyCalculator_version2.java | 63 +++++++++++++++---- 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/src/java2020spring/MyCalculator_version2.java b/src/java2020spring/MyCalculator_version2.java index 2a41531..a4ef886 100644 --- a/src/java2020spring/MyCalculator_version2.java +++ b/src/java2020spring/MyCalculator_version2.java @@ -86,6 +86,7 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL //清除键"C" if(str.equals(labels[5])) { clean(); + num1=0.0; } //百分号键"%" @@ -100,7 +101,7 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL else if(str.contentEquals(labels[1])) { Double sqrt_str=Double.parseDouble(text); if(text.startsWith("-")) { - System.out.println("负数不能开根"); + textField.setText("负数不能开根"); } else{ sqrt_str=Math.sqrt(sqrt_str); @@ -120,7 +121,7 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL else if(str.equals(labels[3])) { Double reciprocal=Double.parseDouble(text); if(reciprocal==0.0) { - System.out.println("零没有倒数"); + textField.setText("零没有倒数"); } else { reciprocal=1/reciprocal; @@ -132,13 +133,20 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL else if(str.equals(labels[4])) { //在按下加减乘除键等号键前和c键一样的功能 //我好像还不会,那先跳过 + if(operation==null) { + clean(); + } + else { + textField.setText(null); + } + //我可以了诶!好耶! } //删除键"delete" else if(str.equals(labels[6])) { int num=text.length(); if(text.length()==0) { - System.out.println("请输入数字"); + textField.setText("请输入数字"); } else { text=text.substring(0,num-1); @@ -169,29 +177,56 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL textField.setText(null);//或者可以直接调用前面写好的clean() operation=str; } + else { + if(operation.equals(labels[19])) { + num1=num1+Double.valueOf(textField.getText()); + textField.setText(String.format("%.3f",num1)); + } + if(operation.equals(labels[15])) { + num1=num1-Double.valueOf(textField.getText()); + textField.setText(String.format("%.3f",num1)); + } + if(operation.equals(labels[11])) { + num1=num1*Double.valueOf(textField.getText()); + textField.setText(String.format("%.3f",num1)); + } + if(operation.equals(labels[7])) { + num1=num1/Double.valueOf(textField.getText()); + textField.setText(String.format("%.3f",num1)); + } + } } //等于号 - else if(str=="=") { - if(text==null) { - num2=0.0; + else if(str.equals(labels[23])) { + if(text==null) {//好像这里按下了"="号之后text就是"="了,就不是null了 (想法2.0 + //对哦我知道了,改改 (想法2.0 + num2=0.0;//这里好奇怪,我明明设置了num2=0.0 (想法1.0 + //这里如果按"6","+","="应该是得到"6"的 (想法1.0 + //但是它却是报错,然后textField也没有"6" (想法1.0 } else { num2=Double.valueOf(text); + //不对不对,那如果按下"="之后,"="会在text里面,那这里num2也不对了 (想法3.0 + //回到想法1.0吧 text里面没有"="的 (想法4.0 } - if(operation=="+") { + if(operation==null) { + num1=Double.valueOf(text); + textField.setText(String.format("%.3f", num1)); + } + if(operation.equals(labels[19])) { num1=num1+num2; textField.setText(String.format("%.3f", num1)); } - if(operation=="-") { + if(operation.equals(labels[15])) { num1=num1-num2; textField.setText(String.format("%.3f", num1)); } - if(operation=="×") { + if(operation.equals(labels[11])) { num1=num1*num2; textField.setText(String.format("%.3f", num1)); } - if(operation=="÷") { + if(operation.equals(labels[7])) { if(num2!=0.0) { num1=num1/num2; textField.setText(String.format("%.3f", num1)); @@ -207,7 +242,7 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL else if(str.equals(labels[20])){ Double before=Double.parseDouble(text); before=-before; - textField.setText(String.valueOf(before)); + textField.setText(String.format("%.3f",before)); } } @@ -216,5 +251,11 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL public void keyTyped(KeyEvent e) {} public void keyReleased(KeyEvent e) {} public void keyPressed(KeyEvent e) { + String text=textField.getText(); + char input=e.getKeyChar(); + int i_input=(int)input; + if(i_input==187) {//查了187是+=这个键的键码值,189是-_的键码值 + textField.setText(text); + } } } -- Gitee From 97ba69fbf8422688dc7a80d1093dbb73d4594642 Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 9 Jun 2021 22:09:08 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BA=86=E7=AE=97?= =?UTF-8?q?=E6=B3=95=E7=9A=84=E9=80=BB=E8=BE=91=EF=BC=8C=E5=86=99=E5=9C=A8?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E9=87=8C=EF=BC=9B=E5=AE=8C=E6=88=90=E4=BA=86?= =?UTF-8?q?=E6=8C=89=E6=95=B0=E5=AD=97=E5=89=8D=E6=8C=89=E4=B8=8B%?= =?UTF-8?q?=E7=AD=89=E6=8C=89=E9=92=AE=E7=9A=84=E9=94=99=E8=AF=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/MyCalculator_version2.java | 217 +++++++++++++++--- 1 file changed, 184 insertions(+), 33 deletions(-) diff --git a/src/java2020spring/MyCalculator_version2.java b/src/java2020spring/MyCalculator_version2.java index a4ef886..1a4a13e 100644 --- a/src/java2020spring/MyCalculator_version2.java +++ b/src/java2020spring/MyCalculator_version2.java @@ -13,20 +13,40 @@ import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JTextField; +import javax.swing.BorderFactory; import javax.swing.JButton; +import javax.swing.JMenuBar; +import javax.swing.JMenu; +import javax.swing.JMenuItem; public class MyCalculator_version2 extends JFrame implements ActionListener,KeyListener { private JPanel contentPane; - private JTextField textField;//最上面那个文本框 + private JTextField textField; + //最上面那个文本框 String []labels= {"%","√","x²","1/x","CE","C","delete", "÷","7","8","9","×","4","5","6","-","1","2","3", - "+","±","0",".","="};//按钮的名字们 - JButton buttons[]=new JButton[labels.length];//按钮们 - private boolean firstDigit=true;//输入数字的时候用到 - private String operation=null;//做运算的时候用到 - Double num1,num2;//把要运算的两个数放在这两个变量里 + "+","±","0",".","="}; + //按钮的名字们 + JButton buttons[]=new JButton[labels.length]; + //按钮们 + private boolean firstDigit=true; + //输入数字的时候用到,可以判断是否为输入的第一个数字 + //如果前面没有输入过数字,fiestDigit默认值是true,按下第一个数字时,会把文本框的内容设置为按下的这个数字 + //这样以来,如果说文本框的内容为“请输入数字”,就可以直接输入数字,而不必先清空文本框了 + Double num1,num2; + private String operation=null; + //做运算的时候用到 + //在按下加减乘除中任何一个键前,operation为默认值null + //在按下加减乘除中一个键的时候,如果这个时候operation为null,说明是按下数字后第一次按运算符 + //那么这个时候,会把文本框里面的数字存到变量num1里面去,然后清空文本框 + //同时,把operation设置成对应的字符序列 + //如果这个时候operation不是null,说明是在累积运算 + //那么就先把前面的num1加上文本框里的数字,然后赋值给num1,清空文本框,再设置operation + private JMenuBar menuBar; + private JMenu mnNewMenu; + private JMenuItem mntmNewMenuItem_3; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @@ -42,23 +62,39 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL }); } - - public MyCalculator_version2() { + + public MyCalculator_version2() {//构造方法的开始 + setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 384, 351); - contentPane = new JPanel(); - contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); + + Color color1=new Color(248,235,216); + Color color2=new Color(218,218,216);//选一个颜色叭 + + menuBar = new JMenuBar(); + setJMenuBar(menuBar); + + mnNewMenu = new JMenu("帮助"); + menuBar.add(mnNewMenu); + + mntmNewMenuItem_3 = new JMenuItem("使用说明"); + mnNewMenu.add(mntmNewMenuItem_3); + + contentPane = new JPanel();//初始化面板 + //contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); + contentPane.setBorder(new EmptyBorder(10, 10,10, 10)); + //contentPane.setBorder(BorderFactory.createMatteBorder(5, 5, 5, 5,color2));//花色边框 + //contentPane.setBorder(BorderFactory.createLoweredBevelBorder());//斜面边框(凹) + contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane); textField = new JTextField(); contentPane.add(textField, BorderLayout.NORTH);//把文本框加到面板上去 - textField.setColumns(10); - textField.setPreferredSize(new Dimension(400,50)); + textField.setPreferredSize(new Dimension(400,50));//设置文本框的大小 textField.setHorizontalAlignment(JTextField.RIGHT);//设置文本框右对齐 - Color pink=new Color(248,235,216);//选一个颜色叭 JPanel panel_buttons = new JPanel(); contentPane.add(panel_buttons, BorderLayout.CENTER); @@ -66,18 +102,20 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL for(int i=0;i Date: Fri, 11 Jun 2021 10:32:55 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=EF=BC=8C=E5=AE=B9=E9=94=99=E6=80=A7=E8=83=BD=E6=9B=B4?= =?UTF-8?q?=E5=A5=BD=E4=BA=86=E4=B8=80=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/MyCalculator_version2.java | 151 +++++++++--------- 1 file changed, 79 insertions(+), 72 deletions(-) diff --git a/src/java2020spring/MyCalculator_version2.java b/src/java2020spring/MyCalculator_version2.java index 1a4a13e..cf45e91 100644 --- a/src/java2020spring/MyCalculator_version2.java +++ b/src/java2020spring/MyCalculator_version2.java @@ -6,47 +6,39 @@ import java.awt.Dimension; import java.awt.EventQueue; import java.awt.GridLayout; import java.awt.event.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JTextField; -import javax.swing.BorderFactory; import javax.swing.JButton; -import javax.swing.JMenuBar; -import javax.swing.JMenu; -import javax.swing.JMenuItem; +/** + * @author 202025710402方泽然 + * @date 2021/06 + */ -public class MyCalculator_version2 extends JFrame implements ActionListener,KeyListener { +public class MyCalculator_version2 extends JFrame implements ActionListener{ private JPanel contentPane; - private JTextField textField; - //最上面那个文本框 - String []labels= {"%","√","x²","1/x","CE","C","delete", + private JTextField textField;//最上面那个文本框 + String []labels= {"%","√","x²","1/x","CE","C","delete",//按钮的名字们 "÷","7","8","9","×","4","5","6","-","1","2","3", "+","±","0",".","="}; - //按钮的名字们 - JButton buttons[]=new JButton[labels.length]; - //按钮们 + JButton buttons[]=new JButton[labels.length];//按钮们 private boolean firstDigit=true; - //输入数字的时候用到,可以判断是否为输入的第一个数字 + /*//输入数字的时候用到,可以判断是否为输入的第一个数字 //如果前面没有输入过数字,fiestDigit默认值是true,按下第一个数字时,会把文本框的内容设置为按下的这个数字 - //这样以来,如果说文本框的内容为“请输入数字”,就可以直接输入数字,而不必先清空文本框了 + //这样以来,如果说文本框的内容为“请输入数字”,就可以直接输入数字,而不必先清空文本框了*/ Double num1,num2; private String operation=null; - //做运算的时候用到 - //在按下加减乘除中任何一个键前,operation为默认值null - //在按下加减乘除中一个键的时候,如果这个时候operation为null,说明是按下数字后第一次按运算符 - //那么这个时候,会把文本框里面的数字存到变量num1里面去,然后清空文本框 - //同时,把operation设置成对应的字符序列 - //如果这个时候operation不是null,说明是在累积运算 - //那么就先把前面的num1加上文本框里的数字,然后赋值给num1,清空文本框,再设置operation - private JMenuBar menuBar; - private JMenu mnNewMenu; - private JMenuItem mntmNewMenuItem_3; + /*做运算的时候用到 + 在按下加减乘除中任何一个键前,operation为默认值null + 在按下加减乘除中一个键的时候,如果这个时候operation为null,说明是按下数字后第一次按运算符 + 那么这个时候,会把文本框里面的数字存到变量num1里面去,然后清空文本框 + 同时,把operation设置成对应的字符序列 + 如果这个时候operation不是null,说明是在累积运算 + 那么就先把前面的num1加上文本框里的数字,然后赋值给num1,清空文本框,再设置operation*/ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @@ -72,15 +64,6 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL Color color1=new Color(248,235,216); Color color2=new Color(218,218,216);//选一个颜色叭 - menuBar = new JMenuBar(); - setJMenuBar(menuBar); - - mnNewMenu = new JMenu("帮助"); - menuBar.add(mnNewMenu); - - mntmNewMenuItem_3 = new JMenuItem("使用说明"); - mnNewMenu.add(mntmNewMenuItem_3); - contentPane = new JPanel();//初始化面板 //contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setBorder(new EmptyBorder(10, 10,10, 10)); @@ -94,6 +77,7 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL contentPane.add(textField, BorderLayout.NORTH);//把文本框加到面板上去 textField.setPreferredSize(new Dimension(400,50));//设置文本框的大小 textField.setHorizontalAlignment(JTextField.RIGHT);//设置文本框右对齐 + textField.setEditable(false); JPanel panel_buttons = new JPanel(); @@ -106,18 +90,18 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL } for(int i=0;i= 0) { if(firstDigit==true) { + if(str.equals(".")) { + textField.setText("0"+str); + } + else { textField.setText(str); + } } else if(str=="."&&textField.getText().indexOf(".")<0) { textField.setText(textField.getText()+str); @@ -239,33 +237,37 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL //加减乘除 else if("+-×÷".indexOf(str)>=0) { - //if(textField.getText().indexOf("0123456789")<0) { - //} if(operation==null) { num1=Double.valueOf(textField.getText()); textField.setText(null);//或者可以直接调用前面写好的clean() + firstDigit=true; operation=str; } else { if(text==null) { operation=str; - textField.setText(String.format("%.3f", num1)); + //textField.setText(String.format("%.3f", num1)); + textField.setText(String.valueOf(num1)); } if(operation.equals(labels[19])) { num1=num1+Double.valueOf(textField.getText()); textField.setText(null); + firstDigit=true; } if(operation.equals(labels[15])) { num1=num1-Double.valueOf(textField.getText()); textField.setText(null); + firstDigit=true; } if(operation.equals(labels[11])) { num1=num1*Double.valueOf(textField.getText()); textField.setText(null); + firstDigit=true; } if(operation.equals(labels[7])) { num1=num1/Double.valueOf(textField.getText()); textField.setText(null); + firstDigit=true; } operation=str; } @@ -273,37 +275,37 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL //等于号 else if(str.equals(labels[23])) { - if(text==null) {//好像这里按下了"="号之后text就是"="了,就不是null了 (想法2.0 - //对哦我知道了,改改 (想法2.0 - num2=0.0;//这里好奇怪,我明明设置了num2=0.0 (想法1.0 - //这里如果按"6","+","="应该是得到"6"的 (想法1.0 - //但是它却是报错,然后textField也没有"6" (想法1.0 + if(text==null) { + num2=0.0; } else { - num2=Double.valueOf(text); - //不对不对,那如果按下"="之后,"="会在text里面,那这里num2也不对了 (想法3.0 - //回到想法1.0吧 text里面没有"="的 (想法4.0 - } - if(operation==null) { + if(operation==null) { num1=Double.valueOf(text); - textField.setText(String.format("%.3f", num1)); - } + //textField.setText(String.format("%.3f", num1)); + textField.setText(String.valueOf(num1)); + } + num2=Double.valueOf(text); + if(operation.equals(labels[19])) { num1=num1+num2; - textField.setText(String.format("%.3f", num1)); + //textField.setText(String.format("%.3f", num1)); + textField.setText(String.valueOf(num1)); } if(operation.equals(labels[15])) { num1=num1-num2; - textField.setText(String.format("%.3f", num1)); + //textField.setText(String.format("%.3f", num1)); + textField.setText(String.valueOf(num1)); } if(operation.equals(labels[11])) { num1=num1*num2; - textField.setText(String.format("%.3f", num1)); + //textField.setText(String.format("%.3f", num1)); + textField.setText(String.valueOf(num1)); } if(operation.equals(labels[7])) { if(num2!=0.0) { num1=num1/num2; - textField.setText(String.format("%.3f", num1)); + //textField.setText(String.format("%.3f", num1)); + textField.setText(String.valueOf(num1)); } else{ textField.setText("零不能做除数"); @@ -311,25 +313,28 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL } } operation=null; + } } //正负号 else if(str.equals(labels[20])){ if(text.length()==0) { textField.setText("请输入数字"); + firstDigit=true; } else { Double before=Double.parseDouble(text); before=-before; - textField.setText(String.format("%.3f",before)); + //textField.setText(String.format("%.3f",before)); + textField.setText(String.valueOf(before)); } } - } + }} - + /*public void keyTyped(KeyEvent e) {} - public void keyTyped(KeyEvent e) {} - public void keyPressed(KeyEvent e) { + public void keyPressed(KeyEvent e) { + String text=textField.getText(); char input=e.getKeyChar(); int i_input=e.getKeyCode(); @@ -408,5 +413,7 @@ public class MyCalculator_version2 extends JFrame implements ActionListener,KeyL operation=null; } } - public void keyReleased(KeyEvent e) {} + + public void keyReleased(KeyEvent e) {} } +*/ \ No newline at end of file -- Gitee From e97d6a917c97ffaa558e4573461e088931f3e51b Mon Sep 17 00:00:00 2001 From: Administrator Date: Fri, 11 Jun 2021 14:09:27 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E5=B7=B2=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/MyCalculator_version2.java | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/src/java2020spring/MyCalculator_version2.java b/src/java2020spring/MyCalculator_version2.java index cf45e91..3e17554 100644 --- a/src/java2020spring/MyCalculator_version2.java +++ b/src/java2020spring/MyCalculator_version2.java @@ -90,6 +90,7 @@ public class MyCalculator_version2 extends JFrame implements ActionListener{ } for(int i=0;i=0) { if(operation==null) { num1=Double.valueOf(textField.getText()); - textField.setText(null);//或者可以直接调用前面写好的clean() + textField.setText(null); firstDigit=true; operation=str; } @@ -329,8 +331,9 @@ public class MyCalculator_version2 extends JFrame implements ActionListener{ textField.setText(String.valueOf(before)); } } - }} - + } + } + //以下为键盘输入功能,但因时间原因未能完成 /*public void keyTyped(KeyEvent e) {} public void keyPressed(KeyEvent e) { @@ -339,13 +342,19 @@ public class MyCalculator_version2 extends JFrame implements ActionListener{ char input=e.getKeyChar(); int i_input=e.getKeyCode(); String s_input=String.valueOf(input); + //输入数字或小数点 if(i_input==KeyEvent.VK_0||i_input==KeyEvent.VK_1||i_input==KeyEvent.VK_2||i_input==KeyEvent.VK_3 ||i_input==KeyEvent.VK_4||i_input==KeyEvent.VK_5||i_input==KeyEvent.VK_6||i_input==KeyEvent.VK_7 ||i_input==KeyEvent.VK_8||i_input==KeyEvent.VK_9||i_input==KeyEvent.VK_PERIOD) { if(firstDigit==true) { + if(s_input.equals(".")) { + textField.setText("0"+s_input); + } + else { textField.setText(s_input); + } } else if(input=='.'&&textField.getText().indexOf(".")<0) { textField.setText(textField.getText()+s_input); @@ -366,7 +375,7 @@ public class MyCalculator_version2 extends JFrame implements ActionListener{ operation=s_input; } else { - if(operation.equals(labels[23])) { + if(operation.equals("=")) { num1=num1+Double.valueOf(textField.getText()); textField.setText(null); } @@ -383,28 +392,33 @@ public class MyCalculator_version2 extends JFrame implements ActionListener{ num2=0.0; } else { - num2=Double.valueOf(text); + num2=Double.valueOf(textField.getText()); } if(operation==null) { - num1=Double.valueOf(text); - textField.setText(String.format("%.3f", num1)); + num1=Double.valueOf(textField.getText()); + //textField.setText(String.format("%.3f", num1)); + textField.setText(String.valueOf(num1)); } if(operation.equals(labels[19])) { num1=num1+num2; - textField.setText(String.format("%.3f", num1)); + //textField.setText(String.format("%.3f", num1)); + textField.setText(String.valueOf(num1)); } if(operation.equals(labels[15])) { num1=num1-num2; - textField.setText(String.format("%.3f", num1)); + //textField.setText(String.format("%.3f", num1)); + textField.setText(String.valueOf(num1)); } if(operation.equals(labels[11])) { num1=num1*num2; - textField.setText(String.format("%.3f", num1)); + //textField.setText(String.format("%.3f", num1)); + textField.setText(String.valueOf(num1)); } if(operation.equals(labels[7])) { if(num2!=0.0) { num1=num1/num2; - textField.setText(String.format("%.3f", num1)); + //textField.setText(String.format("%.3f", num1)); + textField.setText(String.valueOf(num1)); } else{ textField.setText("零不能做除数"); @@ -415,5 +429,4 @@ public class MyCalculator_version2 extends JFrame implements ActionListener{ } public void keyReleased(KeyEvent e) {} -} -*/ \ No newline at end of file +}*/ -- Gitee