From e804aaf4251d97c03b46037f0ae7014bdd8aef1e Mon Sep 17 00:00:00 2001 From: LJY <123.com> Date: Mon, 16 May 2022 22:48:35 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Caculate.java | 17 ++ src/java2022spring/Calculator.java | 52 +++++ src/java2022spring/MainClass.java | 10 + src/java2022spring/PanelNormalCalculator.java | 205 ++++++++++++++++++ src/java2022spring/PanelScientCalculator.java | 6 + 5 files changed, 290 insertions(+) create mode 100644 src/java2022spring/Caculate.java create mode 100644 src/java2022spring/Calculator.java create mode 100644 src/java2022spring/MainClass.java create mode 100644 src/java2022spring/PanelNormalCalculator.java create mode 100644 src/java2022spring/PanelScientCalculator.java diff --git a/src/java2022spring/Caculate.java b/src/java2022spring/Caculate.java new file mode 100644 index 0000000..7dfee06 --- /dev/null +++ b/src/java2022spring/Caculate.java @@ -0,0 +1,17 @@ +package java2022spring; +public class Caculate { + public static double solution(String str) { + public static Double caculateResult(char optemp, double num1, double num2) { + switch (optemp) { + case '+': + return num1 + num2; + case '-': + return num1 - num2; + case '*': + return num1 * num2; + case '/': + return num1 / num2; + } + return 0.0; + } + } diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java new file mode 100644 index 0000000..026d501 --- /dev/null +++ b/src/java2022spring/Calculator.java @@ -0,0 +1,52 @@ +package java2022spring; +import java.awt.*; +import javax.swing.*; +public class Calculator extends JFrame{//创造一个calculator类,JFrame是底层容器,往底层容器Calculator中加两个计算器面板 + PanelNormalCalculator panelnormal;//声明一个标准计算器类对象panelnormal + PanelScientCalculator panelscient;//声明一个科学计算器类对象panelscient + JMenuBar menubar;//声明菜单条 + JMenu edict,check,help; + JMenuItem copy,paste,normal,scient; + JTabbedPane p;//选项卡窗格,可以用来选择标准或者科学计算器,这是个容器 + public Calculator() {}; + public Calculator(String s){//calculator类的构造方法如下 + init1(s);//调用设置菜单方法 + init2();//调用设置界面方法 + setVisible(true);//使得计算器可视 + setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//点击x按钮的时候关闭计算器 + validate(); + } + + void init1(String s) { + setTitle(s); + menubar=new JMenuBar(); + edict=new JMenu("编辑"); + check=new JMenu("类型"); + help=new JMenu("帮助"); + copy=new JMenuItem("复制"); + paste=new JMenuItem("粘贴"); + normal=new JMenuItem("标准"); + scient=new JMenuItem("科学"); + menubar.add(edict); + menubar.add(check); + menubar.add(help); + edict.add(copy); + edict.add(paste); + check.add(normal); + check.add(scient); + setJMenuBar(menubar); + setVisible(true);//使得计算器可视 + setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//点击x按钮的时候关闭计算器 + validate(); + } + + void init2() { + panelnormal=new PanelNormalCalculator();//创造一个PanelNormalCalculator类的panelnormal对象 + panelscient=new PanelScientCalculator();//创造一个PanelScientCalculator类的panelscient对象 + p=new JTabbedPane();//创造一个选项卡对象 + p.add("标准",panelnormal);//将panelnormal对象加入到p选项卡中 + p.add("科学",panelscient);//将panelscient对象加入到p选项卡中 + add(p,BorderLayout.CENTER); + setBounds(10,10,300,400);//设置整个计算器大小位置 + } +} diff --git a/src/java2022spring/MainClass.java b/src/java2022spring/MainClass.java new file mode 100644 index 0000000..3138f0f --- /dev/null +++ b/src/java2022spring/MainClass.java @@ -0,0 +1,10 @@ +package java2022spring; + +public class MainClass { + + public static void main(String[] args) { + Calculator calculator=new Calculator("计算器"); + calculator.setResizable(false); + } + +} diff --git a/src/java2022spring/PanelNormalCalculator.java b/src/java2022spring/PanelNormalCalculator.java new file mode 100644 index 0000000..a85b756 --- /dev/null +++ b/src/java2022spring/PanelNormalCalculator.java @@ -0,0 +1,205 @@ +package java2022spring; +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +public class PanelNormalCalculator extends JPanel{//创建一个以JPanel类为父类的PanelNormalCalculator类,用来创建标准计算器实例 + JPanel panelNormal; + JPanel key=new JPanel(); + JPanel blank=new JPanel(); + //ActionListener percent,CE,C,back,divide_x,square_x,openroot_x,divide,b7,b8,b9,mul,b4,b5,b6,substract,b1,b2,b3,plus,fx,b0,point,equal; + PanelNormalCalculator() { + JSplitPane panelNormal=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,blank,key); + //showBlank(blank); + //showKey(key); + add(panelNormal); + setVisible(true); + validate(); + //} + //public void showBlank(JPanel e) {//显示输入框的方法 + JTextArea text=new JTextArea(3,30); + blank.add(text,BorderLayout.CENTER); + setVisible(true); + validate(); + //} + //public void showKey(JPanel e) {//显示键盘的方法 + GridLayout key1=new GridLayout(7,4); + key.setLayout(key1); + JButton MC=new JButton("MC"); + JButton MR=new JButton("MR"); + JButton MS=new JButton("MS"); + JButton Mplus=new JButton("M+"); + JButton percent=new JButton("%"); + JButton CE=new JButton("CE"); + JButton C=new JButton("c"); + JButton back=new JButton("←"); + JButton divide_x=new JButton("1/x"); + JButton square_x=new JButton("x^2"); + JButton openroot_x=new JButton("√x"); + JButton divide=new JButton("÷"); + JButton b7=new JButton("7"); + JButton b8=new JButton("8"); + JButton b9=new JButton("9"); + JButton mul=new JButton("x"); + JButton b4=new JButton("4"); + JButton b5=new JButton("5"); + JButton b6=new JButton("6"); + JButton substract=new JButton("-"); + JButton b1=new JButton("1"); + JButton b2=new JButton("2"); + JButton b3=new JButton("3"); + JButton plus=new JButton("+"); + JButton fx=new JButton("+/-"); + JButton b0=new JButton("0"); + JButton point=new JButton("."); + JButton equal=new JButton("="); + key.add(MC); + key.add(MR); + key.add(MS); + key.add(Mplus); + key.add(percent); + key.add(CE); + key.add(C); + key.add(back); + key.add(divide_x); + key.add(square_x); + key.add(openroot_x); + key.add(divide); + key.add(b7); + key.add(b8); + key.add(b9); + key.add(mul); + key.add(b4); + key.add(b5); + key.add(b6); + key.add(substract); + key.add(b1); + key.add(b2); + key.add(b3); + key.add(plus); + key.add(fx); + key.add(b0); + key.add(point); + key.add(equal); + setVisible(true); + validate(); + StringBuffer r=new StringBuffer(); + b1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("1"); + text.setText(r.toString()); + } + }); + b2.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("2"); + text.setText(r.toString()); + } + }); + b3.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("3"); + text.setText(r.toString()); + } + }); + b4.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("4"); + text.setText(r.toString()); + } + }); + b5.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("5"); + text.setText(r.toString()); + } + }); + b6.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("6"); + text.setText(r.toString()); + } + }); + b7.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("7"); + text.setText(r.toString()); + } + }); + b8.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("8"); + text.setText(r.toString()); + } + }); + b9.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("9"); + text.setText(r.toString()); + } + }); + b0.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("0"); + text.setText(r.toString()); + } + }); + plus.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("+"); + text.setText(r.toString()); + } + }); + substract.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("-"); + text.setText(r.toString()); + } + }); + mul.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("x"); + text.setText(r.toString()); + } + }); + divide.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("÷"); + text.setText(r.toString()); + } + }); + point.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("."); + text.setText(r.toString()); + } + }); + equal.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("="); + String str=r.toString(); + text.setText(""); + double result= r.solution(str); + String string=String.valueOf(result); + r.delete(0,r.length()); + r.append(string); + text.setText(string); + } + }); + } + public Double solution(char optemp, double num1, double num2) { + switch (optemp) { + case '+': + return num1 + num2; + case '-': + return num1 - num2; + case '*': + return num1 * num2; + case '/': + return num1 / num2; + } + return 0.0; + } + } + + + diff --git a/src/java2022spring/PanelScientCalculator.java b/src/java2022spring/PanelScientCalculator.java new file mode 100644 index 0000000..8e6a4b5 --- /dev/null +++ b/src/java2022spring/PanelScientCalculator.java @@ -0,0 +1,6 @@ +package java2022spring; +import java.awt.*; +import javax.swing.*; +public class PanelScientCalculator extends JPanel{ + +} -- Gitee From 77382ec602fc556dcea3f47cb7c3cc24a3a61956 Mon Sep 17 00:00:00 2001 From: LJY <123.com> Date: Sun, 29 May 2022 10:37:06 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=B7=B2=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Caculate.java | 369 ++++++++++++- src/java2022spring/Calculator.java | 36 +- src/java2022spring/MainClass.java | 2 +- src/java2022spring/PanelNormalCalculator.java | 198 +++++-- src/java2022spring/PanelScientCalculator.java | 514 +++++++++++++++++- 5 files changed, 1055 insertions(+), 64 deletions(-) diff --git a/src/java2022spring/Caculate.java b/src/java2022spring/Caculate.java index 7dfee06..349c40d 100644 --- a/src/java2022spring/Caculate.java +++ b/src/java2022spring/Caculate.java @@ -1,17 +1,358 @@ package java2022spring; +import java.io.*; +import java.util.*; +import javax.swing.*; +import java.math.BigInteger; +import java.io.*; +import java.lang.*; +import java.util.*; +import java.math.BigDecimal; public class Caculate { - public static double solution(String str) { - public static Double caculateResult(char optemp, double num1, double num2) { - switch (optemp) { - case '+': - return num1 + num2; - case '-': - return num1 - num2; - case '*': - return num1 * num2; - case '/': - return num1 / num2; - } - return 0.0; - } + public StringBuffer warn(StringBuffer r) { + r.delete(0,r.length());//删除掉原来的式子 + return r; + } + public static double solutionPercent(String str) { + double num1,num2,finalResult=0.0; + Scanner scanner=new Scanner(str); + scanner.useDelimiter("[^-0123456789.]+"); + try { + num1=scanner.nextDouble(); + finalResult=num1*0.01; + } + catch(InputMismatchException exp) {} + return finalResult; + } + public static double solutionLog(String str) { + double num1,finalResult=0.0; + Scanner scanner=new Scanner(str); + scanner.useDelimiter("[^0123456789.]+"); + try { + num1=scanner.nextDouble(); + finalResult=Math.log(num1); + } + catch(InputMismatchException exp) {} + return finalResult; + } + public static double solutionSin(String str) { + double num1,finalResult=0.0; + Scanner scanner=new Scanner(str); + scanner.useDelimiter("[^0123456789.]+"); + try { + num1=scanner.nextDouble(); + finalResult=Math.sin(num1); + } + catch(InputMismatchException exp) {} + return finalResult; + } + public static double solutionCos(String str) { + double num1,finalResult=0.0; + Scanner scanner=new Scanner(str); + scanner.useDelimiter("[^0123456789.]+"); + try { + num1=scanner.nextDouble(); + finalResult=Math.cos(num1); + } + catch(InputMismatchException exp) {} + return finalResult; + } + public static String solutionTwo(String str) {//针对转换成二进制的方法 + String finalResult=null; + int num1=0,num2=0; + int result=0; + Scanner scanner=new Scanner(str); + scanner.useDelimiter("[^0123456789.]+"); + try { + num1=scanner.nextInt();//获取第一个数字 + int a=Integer.valueOf(num1); + String string1=String.valueOf(a); + int aa=Integer.parseInt(string1,2); + if(str.contains("﹢")) { + num2=scanner.nextInt();//获取第二个数字 + int b=Integer.valueOf(num2); + String string2=String.valueOf(b); + int bb=Integer.parseInt(string2,2); + result=aa+bb; + } + if(str.contains("-") & !str.contains("^-")) { + num2=scanner.nextInt(); + int b1=Integer.valueOf(num2); + String string12=String.valueOf(b1); + int bb1=Integer.parseInt(string12,2); + result=aa-bb1; + } + if(str.contains("×")) { + num2=scanner.nextInt(); + int b2=Integer.valueOf(num2); + String string22=String.valueOf(b2); + int bb2=Integer.parseInt(string22,2); + result=aa*bb2; + } + if(str.contains("÷")) { + num2=scanner.nextInt(); + int b3=Integer.valueOf(num2); + String string23=String.valueOf(b3); + int bb3=Integer.parseInt(string23,2); + result=aa/bb3; + } + if(str.contains("^2")) + result=(int) Math.pow(aa,2); + if(str.contains("√")) + result=(int) Math.sqrt(aa); + if(str.contains("^-1")) + result=1/aa; + finalResult=Integer.toBinaryString(result); + } + catch(InputMismatchException exp) {} + return finalResult; + } + public static String solutionEight(String str) {//针对转换成八进制的方法 + String finalResult=null; + int num1=0,num2=0; + int result=0; + Scanner scanner=new Scanner(str); + scanner.useDelimiter("[^0123456789.]+"); + try { + num1=scanner.nextInt();//获取第一个数字 + int a=Integer.valueOf(num1); + String string1=String.valueOf(a); + int aa=Integer.parseInt(string1,8); + if(str.contains("﹢")) { + num2=scanner.nextInt();//获取第二个数字 + int b=Integer.valueOf(num2); + String string2=String.valueOf(b); + int bb=Integer.parseInt(string2,8); + result=aa+bb; + } + if(str.contains("-") & !str.contains("^-")) { + num2=scanner.nextInt(); + int b1=Integer.valueOf(num2); + String string12=String.valueOf(b1); + int bb1=Integer.parseInt(string12,8); + result=aa-bb1; + } + if(str.contains("×")) { + num2=scanner.nextInt(); + int b2=Integer.valueOf(num2); + String string22=String.valueOf(b2); + int bb2=Integer.parseInt(string22,8); + result=aa*bb2; + } + if(str.contains("÷")) { + num2=scanner.nextInt(); + int b3=Integer.valueOf(num2); + String string23=String.valueOf(b3); + int bb3=Integer.parseInt(string23,8); + result=aa/bb3; + } + if(str.contains("^2")) + result=(int) Math.pow(aa,2); + if(str.contains("√")) + result=(int) Math.sqrt(aa); + if(str.contains("^-1")) + result=1/aa; + finalResult=Integer.toOctalString(result); + } + catch(InputMismatchException exp) {} + return finalResult; + } + public static String solutionSixteen(String str) {//针对转换成十六进制的方法 + int num1=0,num2=0; + String finalResult=null; + int result=0; + Scanner scanner=new Scanner(str); + scanner.useDelimiter("[^0123456789ABCDEFabcdef.]+"); + try { + num1=scanner.nextInt();//获取第一个数字 + int a=Integer.valueOf(num1); + String string1=String.valueOf(a); + int aa=Integer.parseInt(string1,16); + if(str.contains("﹢")) { + num2=scanner.nextInt();//获取第二个数字 + int b=Integer.valueOf(num2); + String string2=String.valueOf(b); + int bb=Integer.parseInt(string2,16); + result=aa+bb; + } + if(str.contains("-") & !str.contains("^-")) { + num2=scanner.nextInt(); + int b1=Integer.valueOf(num2); + String string12=String.valueOf(b1); + int bb1=Integer.parseInt(string12,16); + result=aa-bb1; + } + if(str.contains("×")) { + num2=scanner.nextInt(); + int b2=Integer.valueOf(num2); + String string22=String.valueOf(b2); + int bb2=Integer.parseInt(string22,16); + result=aa*bb2; + } + if(str.contains("÷")) { + num2=scanner.nextInt(); + int b3=Integer.valueOf(num2); + String string23=String.valueOf(b3); + int bb3=Integer.parseInt(string23,16); + result=aa/bb3; + } + if(str.contains("^2")) + result=(int) Math.pow(aa,2); + if(str.contains("√")) + result=(int) Math.sqrt(aa); + if(str.contains("^-1")) + result=1/aa; + finalResult=Integer.toHexString(result); + } + catch(InputMismatchException exp) {} + return finalResult; + } + public static Double solutionTen(String str) {//针对转换成十进制的方法 + double num1,num2; + double finalResult=0.0; + Scanner scanner=new Scanner(str); + scanner.useDelimiter("[^-0123456789.]+"); + while(scanner.hasNext()) { + if(str.contains("﹢")) { + try { + num1=scanner.nextDouble(); + num2=scanner.nextDouble(); + finalResult=num1+num2; + } + catch(InputMismatchException exp) {} + } + if(str.contains("-") & !str.contains("^-")) + try { + num1=scanner.nextDouble(); + num2=scanner.nextDouble(); + finalResult=num1-num2; + } + catch(InputMismatchException exp) {} + + if(str.contains("×")) { + try { + num1=scanner.nextDouble(); + num2=scanner.nextDouble(); + finalResult=num1*num2; + } + catch(InputMismatchException exp) {} + } + if(str.contains("÷")) { + try{ + num1=scanner.nextDouble(); + num2=scanner.nextDouble(); + finalResult=num1/num2; + } + catch(InputMismatchException exp) {}} + if(str.contains("^2")) + try { + num1=scanner.nextDouble(); + finalResult=num1*num1; + } + catch(InputMismatchException exp) {} + if(str.contains("√")) + try { + num1=scanner.nextDouble(); + finalResult=Math.sqrt(num1); + } + catch(InputMismatchException exp) {} + if(str.contains("^-1")) + try { + num1=scanner.nextDouble(); + finalResult=1/num1; + return finalResult; + } + catch(InputMismatchException exp) {} + } + return finalResult; + } + public static double solution1(String str) {//针对"+、-"的方法 + double num1,finalResult=0.0; + Scanner scanner=new Scanner(str); + scanner.useDelimiter("[^-0123456789.]+"); + if(str.contains("-")) + try { + num1=scanner.nextDouble(); + finalResult=Math.abs(num1); + } + catch(InputMismatchException exp) {} + else + try { + num1=scanner.nextDouble(); + finalResult=-num1; + } + catch(Exception exp) {} + return finalResult; + } + + public static double solution(String str) {//针对一般计算方法 + double num1,num2,finalResult=0.0; + Scanner scanner=new Scanner(str); + scanner.useDelimiter("[^-0123456789.]+"); + while(scanner.hasNext()) { + if(str.contains(" ")) {//Mplus方法 + try { + num1=scanner.nextDouble(); + num2=scanner.nextDouble(); + finalResult=num1+num2; + } + catch(Exception exp) {} + } + if(str.contains("﹢")) { + try { + num1=scanner.nextDouble(); + num2=scanner.nextDouble(); + finalResult=num1+num2; + } + catch(Exception exp) { + PanelNormalCalculator.text.setText("只能进行两个数字的计算,请点击C键重新输入"); + } + } + if(str.contains("-") & !str.contains("^-")) + try { + num1=scanner.nextDouble(); + num2=scanner.nextDouble(); + finalResult=num1-num2; + } + catch(Exception exp) {} + + if(str.contains("×")) { + try { + num1=scanner.nextDouble(); + num2=scanner.nextDouble(); + finalResult=num1*num2; + } + catch(Exception exp) {} + } + if(str.contains("÷")) { + try{ + num1=scanner.nextDouble(); + num2=scanner.nextDouble(); + finalResult=num1/num2; + } + catch(Exception exp) {} + } + if(str.contains("^2")) + try { + num1=scanner.nextDouble(); + finalResult=num1*num1; + return finalResult; + } + catch(Exception exp) {} + if(str.contains("√")) + try { + num1=scanner.nextDouble(); + finalResult=Math.sqrt(num1); + return finalResult; + } + catch(Exception exp) {} + if(str.contains("^-1")) + try { + num1=scanner.nextDouble(); + finalResult=1/num1; + return finalResult; + } + catch(Exception exp) {} + } + return finalResult; } +} diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index 026d501..c8e48b6 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -1,12 +1,17 @@ package java2022spring; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + import javax.swing.*; public class Calculator extends JFrame{//创造一个calculator类,JFrame是底层容器,往底层容器Calculator中加两个计算器面板 PanelNormalCalculator panelnormal;//声明一个标准计算器类对象panelnormal PanelScientCalculator panelscient;//声明一个科学计算器类对象panelscient + PanelHistory panelhistory; JMenuBar menubar;//声明菜单条 - JMenu edict,check,help; - JMenuItem copy,paste,normal,scient; + JMenu help,check; + + static JButton history,normal,scient; JTabbedPane p;//选项卡窗格,可以用来选择标准或者科学计算器,这是个容器 public Calculator() {}; public Calculator(String s){//calculator类的构造方法如下 @@ -17,36 +22,37 @@ public class Calculator extends JFrame{// validate(); } + //设置菜单栏视图 void init1(String s) { + //设置菜单 setTitle(s); menubar=new JMenuBar(); - edict=new JMenu("编辑"); - check=new JMenu("类型"); help=new JMenu("帮助"); - copy=new JMenuItem("复制"); - paste=new JMenuItem("粘贴"); - normal=new JMenuItem("标准"); - scient=new JMenuItem("科学"); - menubar.add(edict); - menubar.add(check); + check=new JMenu("使用方法"); + normal=new JButton("标准计算器"); + scient=new JButton("科学计算器"); + history=new JButton("历史记录"); menubar.add(help); - edict.add(copy); - edict.add(paste); - check.add(normal); + menubar.add(check); check.add(scient); + check.add(normal); + help.add(history); setJMenuBar(menubar); setVisible(true);//使得计算器可视 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//点击x按钮的时候关闭计算器 validate(); } + //设置计算器对象并加到窗口中 void init2() { panelnormal=new PanelNormalCalculator();//创造一个PanelNormalCalculator类的panelnormal对象 panelscient=new PanelScientCalculator();//创造一个PanelScientCalculator类的panelscient对象 p=new JTabbedPane();//创造一个选项卡对象 p.add("标准",panelnormal);//将panelnormal对象加入到p选项卡中 - p.add("科学",panelscient);//将panelscient对象加入到p选项卡中 + p.add("科学",panelscient);//将panelscient对象加入到p选项卡中 add(p,BorderLayout.CENTER); - setBounds(10,10,300,400);//设置整个计算器大小位置 + setBounds(10,10,600,400);//设置整个计算器大小位置 + setResizable(true); } } + \ No newline at end of file diff --git a/src/java2022spring/MainClass.java b/src/java2022spring/MainClass.java index 3138f0f..730d977 100644 --- a/src/java2022spring/MainClass.java +++ b/src/java2022spring/MainClass.java @@ -4,7 +4,7 @@ public class MainClass { public static void main(String[] args) { Calculator calculator=new Calculator("计算器"); - calculator.setResizable(false); + calculator.setResizable(true); } } diff --git a/src/java2022spring/PanelNormalCalculator.java b/src/java2022spring/PanelNormalCalculator.java index a85b756..82f8c82 100644 --- a/src/java2022spring/PanelNormalCalculator.java +++ b/src/java2022spring/PanelNormalCalculator.java @@ -2,25 +2,30 @@ package java2022spring; import javax.swing.*; import java.awt.*; import java.awt.event.*; +import java.util.Scanner; public class PanelNormalCalculator extends JPanel{//创建一个以JPanel类为父类的PanelNormalCalculator类,用来创建标准计算器实例 + + //设置基本布局 JPanel panelNormal; JPanel key=new JPanel(); JPanel blank=new JPanel(); + static JTextArea text; //ActionListener percent,CE,C,back,divide_x,square_x,openroot_x,divide,b7,b8,b9,mul,b4,b5,b6,substract,b1,b2,b3,plus,fx,b0,point,equal; PanelNormalCalculator() { JSplitPane panelNormal=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,blank,key); - //showBlank(blank); - //showKey(key); add(panelNormal); setVisible(true); validate(); //} //public void showBlank(JPanel e) {//显示输入框的方法 - JTextArea text=new JTextArea(3,30); - blank.add(text,BorderLayout.CENTER); + text=new JTextArea(3,30); + text.setFont(new Font("宋体",Font.BOLD,22)); + JScrollPane textarea=new JScrollPane(text); + blank.add(textarea); setVisible(true); validate(); //} + //public void showKey(JPanel e) {//显示键盘的方法 GridLayout key1=new GridLayout(7,4); key.setLayout(key1); @@ -30,7 +35,7 @@ public class PanelNormalCalculator extends JPanel{// JButton Mplus=new JButton("M+"); JButton percent=new JButton("%"); JButton CE=new JButton("CE"); - JButton C=new JButton("c"); + JButton C=new JButton("C"); JButton back=new JButton("←"); JButton divide_x=new JButton("1/x"); JButton square_x=new JButton("x^2"); @@ -52,6 +57,7 @@ public class PanelNormalCalculator extends JPanel{// JButton b0=new JButton("0"); JButton point=new JButton("."); JButton equal=new JButton("="); + key.add(MC); key.add(MR); key.add(MS); @@ -82,7 +88,104 @@ public class PanelNormalCalculator extends JPanel{// key.add(equal); setVisible(true); validate(); - StringBuffer r=new StringBuffer(); + + //设置计算相关行为 + StringBuffer r=new StringBuffer();//r用来表示输入的式子 + StringBuffer rHistory=new StringBuffer();//rHistory用于MC、MR、MS相关操作 + StringBuffer rAllHistory=new StringBuffer();//rAllHistory用来存放所有的历史记录 + MR.addActionListener(new ActionListener() { //将当前数字存储 + public void actionPerformed(ActionEvent e) { + rHistory.append(r); + text.setText(r.toString()); + } + }); + MC.addActionListener(new ActionListener() { //将存储的数字删除 + public void actionPerformed(ActionEvent e) { + rHistory.delete(0,rHistory.length()); + text.setText(r.toString()); + } + }); + MS.addActionListener(new ActionListener() { //用当前的数字将之前存储的数字覆盖掉 + public void actionPerformed(ActionEvent e) { + rHistory.delete(0,rHistory.length()); + rHistory.append(r); + text.setText(r.toString()); + } + }); + Mplus.addActionListener(new ActionListener() { //将当前数字和之前存储的数字相加 + public void actionPerformed(ActionEvent e) { + r.append(" "); + r.append(String.valueOf(rHistory)); + String str=r.toString();//获取前面的式子 + double result= Caculate.solution(str);//计算出结果并且赋值给double型的变量result + String string=String.valueOf(result);//把double类型的result转变为string型的并且赋值给字符串string + r.delete(0,r.length());//删除掉原来的式子 + //rHistory.delete(0,rHistory.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减 + } + }); + percent.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String str=r.toString();//获取前面的式子 + double result= Caculate.solutionPercent(str);//计算出结果并且赋值给double型的变量result + String string=String.valueOf(result);//把double类型的result转变为string型的并且赋值给字符串string + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减 + } + }); + C.addActionListener(new ActionListener() { //清除这行内容 + public void actionPerformed(ActionEvent e) { + text.setText(""); + r.delete(0,r.length());//删除掉原来的式子 + } + }); + CE.addActionListener(new ActionListener() { //清除所有记录,包括存储的内容 + public void actionPerformed(ActionEvent e) { + text.setText(""); + r.delete(0,r.length()); + rHistory.delete(0,rHistory.length()); + } + }); + back.addActionListener(new ActionListener() { //删除最后一个字符 + public void actionPerformed(ActionEvent e) { + r.deleteCharAt(r.length()-1); + text.setText(r.toString()); + } + }); + fx.addActionListener(new ActionListener() { //取相反数或改变正负号 + public void actionPerformed(ActionEvent e) { + double result,str2result; + String str=r.toString();//获取前面的式子 + Scanner scanner=new Scanner(str); + Scanner scanner1=new Scanner(str); + scanner.useDelimiter("[^-0123456789.()]+"); + scanner1.useDelimiter("[-0123456789.]+"); + try { + String str1=scanner.next(); + String str3=scanner1.next(); + String str2=scanner.next(); + str2result=Caculate.solution1(str2); + String str22result=String.valueOf(str2result); + r.delete(0, r.length()); + r.append(str1); + r.append(str3); + r.append("("); + r.append(str22result); + r.append(")"); + String string=r.toString(); + text.setText(string); + } + catch(Exception exp){ + result=Caculate.solution1(str);//把它变成相反数 + String string=String.valueOf(result);//把double类型的result转变为string型的并且赋值给字符串string + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减 + } + } + }); b1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { r.append("1"); @@ -145,19 +248,19 @@ public class PanelNormalCalculator extends JPanel{// }); plus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - r.append("+"); + r.append("﹢"); text.setText(r.toString()); } }); substract.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - r.append("-"); + r.append("-"); text.setText(r.toString()); } }); mul.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - r.append("x"); + r.append("×"); text.setText(r.toString()); } }); @@ -170,36 +273,67 @@ public class PanelNormalCalculator extends JPanel{// point.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { r.append("."); - text.setText(r.toString()); + text.setText(r.toString());//把加完.的字符串r在text中显示出来 } }); + square_x.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("^2"); + text.setText(r.toString()); + } + }); + openroot_x.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("√"); + text.setText(r.toString()); + } + }); + divide_x.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("^-1"); + text.setText(r.toString()); + } + }); equal.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - r.append("="); - String str=r.toString(); - text.setText(""); - double result= r.solution(str); - String string=String.valueOf(result); - r.delete(0,r.length()); - r.append(string); - text.setText(string); + r.append("=");//追加=到r后面 + String str=r.toString();//获取前面的式子 + try { + Scanner scanner1=new Scanner(str); + scanner1.useDelimiter("[-0123456789.]+"); + String str1=scanner1.next(); + String str2=scanner1.next(); + String str3=scanner1.next(); + text.setText("错误!只能进行两个数之间的运算\n请单击C键重新输入"); + } + catch(Exception exp) { + double result= Caculate.solution(str);//计算出结果并且赋值给double型的变量result + String string=String.valueOf(result);//把double类型的result转变为string型的并且赋值给字符串string + rAllHistory.append(r); + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + rAllHistory.append(r); + rAllHistory.append("\n"); + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减} } - }); } - public Double solution(char optemp, double num1, double num2) { - switch (optemp) { - case '+': - return num1 + num2; - case '-': - return num1 - num2; - case '*': - return num1 * num2; - case '/': - return num1 / num2; - } - return 0.0; - } + }); + Calculator.history.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String warning="如需返回计算界面,请单击C键"; + rAllHistory.append(warning); + String strhistory=rAllHistory.toString(); + text.setText(strhistory); + } + }); + Calculator.normal.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String information="标准计算器使用方法:\n“±”用于取当前数字的相反数或者改变式子第二个数字的正负号\n“-”不能用作负号\nMC:清除储存的数字\nMS:覆盖MR存储的数字\nM+:将存储的数字与当前数字相加\nMR:存储当前数字\nCE:清除包括存储的所有内容\nC:清除所有内容\nx^2:取当前数字的平方\nx^-1:去当前数字的-1次方\n如需返回计算界面,请单击C键"; + text.setText(information); + } + }); } +} diff --git a/src/java2022spring/PanelScientCalculator.java b/src/java2022spring/PanelScientCalculator.java index 8e6a4b5..f5838e2 100644 --- a/src/java2022spring/PanelScientCalculator.java +++ b/src/java2022spring/PanelScientCalculator.java @@ -1,6 +1,516 @@ package java2022spring; import java.awt.*; import javax.swing.*; -public class PanelScientCalculator extends JPanel{ - +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Scanner; +public class PanelScientCalculator extends JPanel{//创建一个以JPanel类为父类的PanelScientCalculator类,用来创建科学计算器实例 + + //设置基本布局 + JPanel panelNormal; + JPanel key=new JPanel(); + JPanel blank=new JPanel(); + PanelScientCalculator() { + JSplitPane panelNormal=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,blank,key); + add(panelNormal); + setVisible(true); + validate(); + + //显示输入框 + JTextArea text=new JTextArea(3,49); + text.setFont(new Font("宋体",Font.BOLD,21)); + JScrollPane textarea=new JScrollPane(text); + blank.add(textarea); + //blank.add(text,BorderLayout.CENTER); + setVisible(true); + validate(); + + //显示键盘 + GridLayout key2=new GridLayout(8,6); + key.setLayout(key2); + JButton A=new JButton("A"); + JButton B=new JButton("B"); + JButton c=new JButton("C"); + JButton D=new JButton("D"); + JButton E=new JButton("E"); + JButton F=new JButton("F"); + JButton sixteen=new JButton("十六进制="); + JButton ten=new JButton("十进制="); + JButton eight=new JButton("八进制="); + JButton two=new JButton("二进制="); + JButton MC=new JButton("MC"); + JButton MR=new JButton("MR"); + JButton MS=new JButton("MS"); + JButton Mplus=new JButton("M+"); + JButton percent=new JButton("%"); + JButton CE=new JButton("CE"); + JButton C=new JButton("C"); + JButton back=new JButton("←"); + JButton divide_x=new JButton("1/x"); + JButton square_x=new JButton("x^2"); + JButton openroot_x=new JButton("√x"); + JButton divide=new JButton("÷"); + JButton b7=new JButton("7"); + JButton b8=new JButton("8"); + JButton b9=new JButton("9"); + JButton mul=new JButton("x"); + JButton b4=new JButton("4"); + JButton b5=new JButton("5"); + JButton b6=new JButton("6"); + JButton substract=new JButton("-"); + JButton b1=new JButton("1"); + JButton b2=new JButton("2"); + JButton b3=new JButton("3"); + JButton plus=new JButton("+"); + JButton fx=new JButton("+/-"); + JButton b0=new JButton("0"); + JButton point=new JButton("."); + JButton equal=new JButton("="); + JButton log=new JButton("log"); + JButton sin=new JButton("sin"); + JButton cos=new JButton("cos"); + JButton asin=new JButton("asin"); + + key.add(sin); + key.add(log); + key.add(MC); + key.add(MR); + key.add(MS); + key.add(Mplus); + key.add(cos); + key.add(A); + key.add(percent); + key.add(CE); + key.add(C); + key.add(back); + key.add(asin); + key.add(B); + key.add(divide_x); + key.add(square_x); + key.add(openroot_x); + key.add(divide); + key.add(sixteen); + key.add(c); + key.add(b7); + key.add(b8); + key.add(b9); + key.add(mul); + key.add(ten); + key.add(D); + key.add(b4); + key.add(b5); + key.add(b6); + key.add(substract); + key.add(eight); + key.add(E); + key.add(b1); + key.add(b2); + key.add(b3); + key.add(plus); + key.add(two); + key.add(F); + key.add(fx); + key.add(b0); + key.add(point); + key.add(equal); + + setVisible(true); + validate(); + + //设置计算相关行为 + StringBuffer r=new StringBuffer();//r用来表示输入的式子 + StringBuffer rHistory=new StringBuffer();//rHistory用于MC、MR、MS相关操作 + StringBuffer rAllHistory=new StringBuffer();//rAllHistory用来存放所有的历史记录 + MR.addActionListener(new ActionListener() { //将当前数字存储 + public void actionPerformed(ActionEvent e) { + rHistory.append(r); + text.setText(r.toString()); + } + }); + MC.addActionListener(new ActionListener() { //将存储的数字删除 + public void actionPerformed(ActionEvent e) { + rHistory.delete(0,rHistory.length()); + text.setText(r.toString()); + } + }); + MS.addActionListener(new ActionListener() { //用当前的数字将之前存储的数字覆盖掉 + public void actionPerformed(ActionEvent e) { + rHistory.delete(0,rHistory.length()); + rHistory.append(r); + text.setText(r.toString()); + } + }); + Mplus.addActionListener(new ActionListener() { //将当前数字和之前存储的数字相加 + public void actionPerformed(ActionEvent e) { + r.append(" "); + r.append(String.valueOf(rHistory)); + String str=r.toString();//获取前面的式子 + double result= Caculate.solution(str);//计算出结果并且赋值给double型的变量result + String string=String.valueOf(result);//把double类型的result转变为string型的并且赋值给字符串string + r.delete(0,r.length());//删除掉原来的式子 + //rHistory.delete(0,rHistory.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减 + } + }); + C.addActionListener(new ActionListener() { //清除这行内容 + public void actionPerformed(ActionEvent e) { + text.setText(""); + r.delete(0,r.length());//删除掉原来的式子 + } + }); + CE.addActionListener(new ActionListener() { //清除所有记录,包括存储的内容 + public void actionPerformed(ActionEvent e) { + text.setText(""); + r.delete(0,r.length()); + rHistory.delete(0,rHistory.length()); + } + }); + back.addActionListener(new ActionListener() { //删除最后一个字符 + public void actionPerformed(ActionEvent e) { + r.deleteCharAt(r.length()-1); + text.setText(r.toString()); + } + }); + fx.addActionListener(new ActionListener() { //取相反数 + public void actionPerformed(ActionEvent e) { + double result,str2result; + String str=r.toString();//获取前面的式子 + Scanner scanner=new Scanner(str); + Scanner scanner1=new Scanner(str); + scanner.useDelimiter("[^-0123456789.()]+"); + scanner1.useDelimiter("[-0123456789.]+"); + try { + String str1=scanner.next(); + String str3=scanner1.next(); + String str2=scanner.next(); + str2result=Caculate.solution1(str2); + String str22result=String.valueOf(str2result); + r.delete(0, r.length()); + r.append(str1); + r.append(str3); + r.append("("); + r.append(str22result); + r.append(")"); + String string=r.toString(); + text.setText(string); + } + catch(Exception exp){ + result=Caculate.solution1(str);//把它变成相反数 + String string=String.valueOf(result);//把double类型的result转变为string型的并且赋值给字符串string + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减 + } + } + }); + percent.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String str=r.toString();//获取前面的式子 + double result= Caculate.solutionPercent(str);//计算出结果并且赋值给double型的变量result + String string=String.valueOf(result);//把double类型的result转变为string型的并且赋值给字符串string + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减 + } + }); + b1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("1"); + text.setText(r.toString()); + } + }); + b2.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("2"); + text.setText(r.toString()); + } + }); + b3.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("3"); + text.setText(r.toString()); + } + }); + b4.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("4"); + text.setText(r.toString()); + } + }); + b5.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("5"); + text.setText(r.toString()); + } + }); + b6.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("6"); + text.setText(r.toString()); + } + }); + b7.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("7"); + text.setText(r.toString()); + } + }); + b8.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("8"); + text.setText(r.toString()); + } + }); + b9.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("9"); + text.setText(r.toString()); + } + }); + b0.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("0"); + text.setText(r.toString()); + } + }); + A.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("A"); + text.setText(r.toString()); + } + }); + B.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("B"); + text.setText(r.toString()); + } + }); + c.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("C"); + text.setText(r.toString()); + } + }); + D.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("D"); + text.setText(r.toString()); + } + }); + E.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("E"); + text.setText(r.toString()); + } + }); + F.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("F"); + text.setText(r.toString()); + } + }); + plus.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("﹢"); + text.setText(r.toString()); + } + }); + substract.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("-"); + text.setText(r.toString()); + } + }); + mul.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("×"); + text.setText(r.toString()); + } + }); + divide.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("÷"); + text.setText(r.toString()); + } + }); + point.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("."); + text.setText(r.toString());//把加完.的字符串r在text中显示出来 + } + }); + square_x.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("^2"); + text.setText(r.toString()); + } + }); + openroot_x.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("√"); + text.setText(r.toString()); + } + }); + divide_x.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("^-1"); + text.setText(r.toString()); + } + }); + log.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String str=r.toString();//获取前面的式子 + double resultNow=Caculate.solutionLog(str); + String string=String.valueOf(resultNow);//把double类型的result转变为string型的并且赋值给字符串string + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减 + } + }); + sin.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String str=r.toString();//获取前面的式子 + double resultNow=Caculate.solutionSin(str); + String string=String.valueOf(resultNow);//把double类型的result转变为string型的并且赋值给字符串string + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减 + } + }); + cos.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String str=r.toString();//获取前面的式子 + double resultNow=Caculate.solutionCos(str); + String string=String.valueOf(resultNow);//把double类型的result转变为string型的并且赋值给字符串string + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减 + } + }); + two.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("=");//追加=到r后面 + String str=r.toString();//获取前面的式子 + try { + Scanner scanner1=new Scanner(str); + scanner1.useDelimiter("[-0123456789.]+"); + String str1=scanner1.next(); + String str2=scanner1.next(); + String str3=scanner1.next(); + text.setText("错误!只能进行两个数之间的运算\n请遵循运算规则正确输入\n请单击C键重新输入"); + } + catch(Exception exp) { + String result= Caculate.solutionTwo(str);//计算出结果并且赋值给double型的变量result + String string=String.valueOf(result);//把double类型的result转变为string型的并且赋值给字符串string + rAllHistory.append(r); + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + rAllHistory.append(r); + rAllHistory.append("\n"); + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减} + } + } + }); + + eight.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("=");//追加=到r后面 + String str=r.toString();//获取前面的式子 + try { + Scanner scanner1=new Scanner(str); + scanner1.useDelimiter("[-0123456789.]+"); + String str1=scanner1.next(); + String str2=scanner1.next(); + String str3=scanner1.next(); + text.setText("错误!只能进行两个数之间的运算\n请遵循运算规则正确输入\n请单击C键重新输入"); + } + catch(Exception exp) { + String result= Caculate.solutionEight(str);//计算出结果并且赋值给double型的变量result + String string=String.valueOf(result);//把double类型的result转变为string型的并且赋值给字符串string + rAllHistory.append(r); + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + rAllHistory.append(r); + rAllHistory.append("\n"); + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减} + } + } + }); + ten.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("=");//追加=到r后面 + String str=r.toString();//获取前面的式子 + try { + Scanner scanner1=new Scanner(str); + scanner1.useDelimiter("[-0123456789.]+"); + String str1=scanner1.next(); + String str2=scanner1.next(); + String str3=scanner1.next(); + text.setText("错误!只能进行两个数之间的运算\n请遵循运算规则正确输入\n请单击C键重新输入"); + } + catch(Exception exp) { + double result= Caculate.solutionTen(str);//计算出结果并且赋值给double型的变量result + String string=String.valueOf(result);//把double类型的result转变为string型的并且赋值给字符串string + rAllHistory.append(r); + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + rAllHistory.append(r); + rAllHistory.append("\n"); + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减} + } + } + }); + sixteen.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("=");//追加=到r后面 + String str=r.toString();//获取前面的式子 + String string=Caculate.solutionSixteen(str);//计算出结果并且赋值给double型的变量result + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减 + } + }); + equal.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + r.append("=");//追加=到r后面 + String str=r.toString();//获取前面的式子 + try { + Scanner scanner1=new Scanner(str); + scanner1.useDelimiter("[-0123456789.]+"); + String str1=scanner1.next(); + String str2=scanner1.next(); + String str3=scanner1.next(); + text.setText("错误!只能进行两个数之间的运算\n请遵循运算规则正确输入\n请单击C键重新输入"); + } + catch(Exception exp) { + double result= Caculate.solution(str);//计算出结果并且赋值给double型的变量result + String string=String.valueOf(result);//把double类型的result转变为string型的并且赋值给字符串string + rAllHistory.append(r); + r.delete(0,r.length());//删除掉原来的式子 + r.append(string);//把result加到r字符串里面去 + rAllHistory.append(r); + rAllHistory.append("\n"); + text.setText(string);//显示结果,这个结果是string型的,这样就可以继续用这个结果加减} + } + } + }); + Calculator.history.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String warning="如需返回计算界面,请单击C键"; + rAllHistory.append(warning); + String strhistory=rAllHistory.toString(); + text.setText(strhistory); + } + }); + Calculator.scient.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String information="科学计算器使用方法:\n“±”用于取当前数字的相反数或者改变式子第二个数字的正负号\n“-”不能用作负号\n二进制=:得出二进制计算结果\n八进制=:得出八进制计算结果\n十进制=:得出十进制计算结果\n十六进制=:得出十六进制计算结果\nsin:求当前数字的sin值\ncos:求当前数字的cos值\nasin:求当前数字的反三角函数值\nlog:取当前数字的对数\nMC:清除储存的数字\nMS:覆盖MR存储的数字\nM+:将存储的数字与当前数字相加\nMR:存储当前数字\nCE:清除包括存储的所有内容\nC:清除所有内容\nx^2:取当前数字的平方\nx^-1:去当前数字的-1次方\n如需返回计算界面,请单击C键"; + text.setText(information); + } + }); + } } + + + -- Gitee From 1e1efbba9bf82793d4f1b494fc05466da6e29bbb Mon Sep 17 00:00:00 2001 From: LJY <123.com> Date: Sun, 29 May 2022 17:22:43 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=B7=B2=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Calculator.java | 1 - src/java2022spring/PanelScientCalculator.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index c8e48b6..0006434 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -7,7 +7,6 @@ import javax.swing.*; public class Calculator extends JFrame{//创造一个calculator类,JFrame是底层容器,往底层容器Calculator中加两个计算器面板 PanelNormalCalculator panelnormal;//声明一个标准计算器类对象panelnormal PanelScientCalculator panelscient;//声明一个科学计算器类对象panelscient - PanelHistory panelhistory; JMenuBar menubar;//声明菜单条 JMenu help,check; diff --git a/src/java2022spring/PanelScientCalculator.java b/src/java2022spring/PanelScientCalculator.java index f5838e2..5bf3d1b 100644 --- a/src/java2022spring/PanelScientCalculator.java +++ b/src/java2022spring/PanelScientCalculator.java @@ -17,7 +17,7 @@ public class PanelScientCalculator extends JPanel{// validate(); //显示输入框 - JTextArea text=new JTextArea(3,49); + JTextArea text=new JTextArea(3,52); text.setFont(new Font("宋体",Font.BOLD,21)); JScrollPane textarea=new JScrollPane(text); blank.add(textarea); -- Gitee From 9c828c17f3097603f8f67f10c756b67095a70d68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?202125710409=E5=BB=96=E9=87=91=E6=80=A1?= <10938081+ljy202125710409@user.noreply.gitee.com> Date: Sun, 29 May 2022 09:24:04 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20src/?= =?UTF-8?q?java2022spring/Test.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Test.java | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 src/java2022spring/Test.java diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java deleted file mode 100644 index 24deb29..0000000 --- a/src/java2022spring/Test.java +++ /dev/null @@ -1,7 +0,0 @@ -package java2022spring; - -public class Test { - public static void main(String[] args) { - System.out.println("Hello world!"); - } -} -- Gitee