diff --git a/src/java2020spring/Calculator.java b/src/java2020spring/Calculator.java new file mode 100644 index 0000000000000000000000000000000000000000..017d4c0876a03f25eacd6b2cccfba4c24d68cb59 --- /dev/null +++ b/src/java2020spring/Calculator.java @@ -0,0 +1,245 @@ +package java2020spring; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +public class Calculator extends JFrame implements ActionListener{ +//计算器按键名 +String[] strkey= {"7","8","9","+","sqrt","4","5","6","-","X^2","1","2","3","*","%",".","0","=","/","1/x","sin","cos","tan","log","+/-","时间","质量","长度","面积","说明"}; +//计算器按键名 +String[] strgl= {"C","Back"}; +//计算器按钮 +JButton[]key=new JButton[strkey.length]; +//计算器按钮 +JButton[] gl=new JButton[strgl.length]; +//文本框初始值 +JTextField textField=new JTextField("0"); +//用户输入的是第一个数字 +boolean firstnumber=true; +//运算中间值 +double middlenumber=0.0; +//运算符 +String operator="="; +//运算是否合法 +boolean flag=true; +public Calculator() { + super(); + //计算器界面设计 + init(); + //设置背景颜色 + this.setBackground(Color.white); + //设置标题 + this.setTitle("计算器"); + //设置大小及位置 + this.setBounds(100,100,500,300); + //不允许修改窗口大小 + this.setResizable(false); +} +public void init() { + //文本内容右对齐 + textField.setHorizontalAlignment(JTextField.RIGHT); + //文本内容不许修改 + textField.setEditable(false); + //文本框背景颜色 + textField.setBackground(Color.white); + //设置按键布局及按键颜色 + JPanel panelkey=new JPanel(); + panelkey.setLayout(new GridLayout(6,5,8,8)); + for(int i=0;i=0) { + handleNumber(label); + } + else { + handleOperator(label); + } +} +void handleC() { + //初始化文本内容 + textField.setText("0"); + firstnumber=true; + operator="="; +} +void handleBack() { + String text=textField.getText(); + //判断文本长度,若大于0则减少最后一位若等于0则初始化内容 + int i=text.length(); + if(i>0) { + text=text.substring(0,i-1); + if(i==0) { + textField.setText("0"); + firstnumber=true; + operator="="; + } + else { + textField.setText(text); + } + } +} +void handleNumber(String key) { + if(firstnumber) { + //输入第一个数字 + textField.setText(key); + } + //第一次输入"."则将"."放在文本最后 + else if((key.equals("."))&&(textField.getText().indexOf(".")<0)) { + textField.setText(textField.getText()+"."); + } + //输入的不是"."则将数字放在文本最后 + else if(!key.equals(".")) { + textField.setText(textField.getText()+key); + } + firstnumber=false; +} +void handleOperator(String key) { + //加运算操作 + if(operator.equals("+")) { + middlenumber+=getNumber(); + } + //减运算操作 + else if(operator.equals("-")) { + middlenumber-=getNumber(); + } + //乘运算操作 + else if(operator.equals("*")) { + middlenumber*=getNumber(); + } + //除运算操作 + else if(operator.equals("/")) { + if(getNumber()==0.0) { + flag=false; + textField.setText("除数不能为零"); + } + else { + middlenumber/=getNumber(); + } + } + //开方运算操作 + else if(operator.equals("sqrt")) { + middlenumber=Math.sqrt(middlenumber); + } + //平方运算操作 + else if(operator.equals("X^2")) { + middlenumber=Math.pow(middlenumber,2); + } + //百分号运算操作 + else if(operator.equals("%")) { + middlenumber=middlenumber/100; + } + //倒数运算操作 + else if(operator.equals("1/x")) { + if(middlenumber==0.0) { + flag=false; + textField.setText("零没有倒数"); + } + else { + middlenumber=1/middlenumber; + } + } + //正弦运算操作 + else if(operator.equals("sin")) { + middlenumber=Math.sin(middlenumber); + } + //预先运算操作 + else if(operator.equals("cos")) { + middlenumber=Math.cos(middlenumber); + } + //正切运算操作 + else if(operator.equals("tan")) { + middlenumber=Math.tan(middlenumber); + } + //对数运算操作 + else if(operator.equals("log")) { + middlenumber=Math.log(middlenumber); + } + //正负值运算操作 + else if(operator.equals("+/-")) { + middlenumber=middlenumber*(-1); + } + //结果运算操作 + else if(operator.equals("=")) { + middlenumber=getNumber(); + } + //打开新窗口 + else if(operator.equals("时间")) { + new Window1(); + } + //打开新窗口 + else if(operator.equals("质量")) { + new Window2(); + } + //打开新窗口 + else if(operator.equals("长度")) { + new Window3(); + } + //打开新窗口 + else if(operator.equals("面积")) { + new Window4(); + } + //打开新窗口 + else if(operator.equals("说明")) { + new Window5(); + } + //运算 + if(flag) { + long number1; + double number2; + number1=(long)middlenumber; + number2=middlenumber-number1; + if(number2==0) { + textField.setText(String.valueOf(number1)); + } + else { + textField.setText(String.valueOf(middlenumber)); + } + } + operator=key; + firstnumber=true; + flag=true; +} +double getNumber() { + double result=0; + try {result=Double.valueOf(textField.getText()).doubleValue(); + } + catch(NumberFormatException e) {} + return result; +} +public static void main(String args[]) { + Calculator calculator=new Calculator(); + calculator.setVisible(true); + calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +} +} \ No newline at end of file diff --git a/src/java2020spring/Window1.java b/src/java2020spring/Window1.java new file mode 100644 index 0000000000000000000000000000000000000000..9b5f4054097507a6cb25bcb2a3d7098fd8cc07cf --- /dev/null +++ b/src/java2020spring/Window1.java @@ -0,0 +1,21 @@ +package java2020spring; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +public class Window1 extends JFrame { +public Window1() { + this.setResizable(false); + this.setVisible(true); + this.setBounds(100,100,600,200); + this.setTitle("时间"); + JLabel label=new JLabel("1年=356/366天,1月=30/31天,1天=24小时,1小时=60分钟,1分钟=60秒"); + label.setFont(new Font("宋体",Font.BOLD,18)); + label.setSize(10,10); + getContentPane().add(label); +} +public static void main(String args[]) { + Window1 window=new Window1(); + window.setVisible(true); + window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +} +} \ No newline at end of file diff --git a/src/java2020spring/Window2.java b/src/java2020spring/Window2.java new file mode 100644 index 0000000000000000000000000000000000000000..05fee91dd5c7cfc265d3c2f9ab1819e45c48fe13 --- /dev/null +++ b/src/java2020spring/Window2.java @@ -0,0 +1,21 @@ +package java2020spring; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +public class Window2 extends JFrame { +public Window2() { + this.setResizable(false); + this.setVisible(true); + this.setBounds(100,100,500,200); + this.setTitle("质量"); + JLabel label=new JLabel("1吨=1000千克,1千克=1000克,1公斤=2斤,1斤=500克"); + label.setFont(new Font("宋体",Font.BOLD,18)); + label.setSize(10,10); + getContentPane().add(label); +} +public static void main(String args[]) { + Window2 window=new Window2(); + window.setVisible(true); + window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +} +} diff --git a/src/java2020spring/Window3.java b/src/java2020spring/Window3.java new file mode 100644 index 0000000000000000000000000000000000000000..4f691443c8a7a7d666102eea8606437d6a9926d6 --- /dev/null +++ b/src/java2020spring/Window3.java @@ -0,0 +1,21 @@ +package java2020spring; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +public class Window3 extends JFrame { +public Window3() { + this.setResizable(false); + this.setVisible(true); + this.setBounds(100,100,500,200); + this.setTitle("时间"); + JLabel label=new JLabel("1公里=1000米,1米=10分米,1分米=10厘米,1厘米=10毫米"); + label.setFont(new Font("宋体",Font.BOLD,18)); + label.setSize(10,10); + getContentPane().add(label); +} +public static void main(String args[]) { + Window3 window=new Window3(); + window.setVisible(true); + window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +} +} \ No newline at end of file diff --git a/src/java2020spring/Window4.java b/src/java2020spring/Window4.java new file mode 100644 index 0000000000000000000000000000000000000000..edefcfbe6d1ac29dc97accf06832fd2e1ddae68d --- /dev/null +++ b/src/java2020spring/Window4.java @@ -0,0 +1,21 @@ +package java2020spring; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +public class Window4 extends JFrame { +public Window4() { + this.setResizable(false); + this.setVisible(true); + this.setBounds(100,100,950,300); + this.setTitle("时间"); + JLabel label=new JLabel("1 平方千米=1000000 平方米,1 平方米=100 平方分米,1 平方分米=100 平方厘米,1 平方厘米=100 平方毫米"); + label.setFont(new Font("宋体",Font.BOLD,18)); + label.setSize(10,10); + getContentPane().add(label); +} +public static void main(String args[]) { + Window4 window=new Window4(); + window.setVisible(true); + window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +} +} \ No newline at end of file diff --git a/src/java2020spring/Window5.java b/src/java2020spring/Window5.java new file mode 100644 index 0000000000000000000000000000000000000000..34913a1f47822b8c762ec4107a426e1a48b0def9 --- /dev/null +++ b/src/java2020spring/Window5.java @@ -0,0 +1,21 @@ +package java2020spring; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +public class Window5 extends JFrame { +public Window5() { + this.setResizable(false); + this.setVisible(true); + this.setBounds(100,100,650,200); + this.setTitle("时间"); + JLabel label=new JLabel("可用计算器页面进行基本的运算,点击最下方按键可以看到常用单位换算。"); + label.setFont(new Font("宋体",Font.BOLD,18)); + label.setSize(10,10); + getContentPane().add(label); +} +public static void main(String args[]) { + Window5 window=new Window5(); + window.setVisible(true); + window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +} +} \ No newline at end of file