From df629e26393e7a5db7c51db8466b3e25ee0574ec Mon Sep 17 00:00:00 2001 From: PC Date: Wed, 8 Jun 2022 15:43:32 +0800 Subject: [PATCH 1/2] 111 --- src/java2022spring/Calculator.java | 319 +++++++++++++++++++++++++++++ 1 file changed, 319 insertions(+) create mode 100644 src/java2022spring/Calculator.java diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java new file mode 100644 index 0000000..ad0fc22 --- /dev/null +++ b/src/java2022spring/Calculator.java @@ -0,0 +1,319 @@ +package java2022spring; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.math.BigDecimal; +import java.util.Vector; +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.UIManager; +class Calculator { + JFrame x =new JFrame("小新计算器"); + JTextField result_Text=new JTextField(20); + JButton buttonNum[],buttonOper[],buttonPoint,buttonEqual,buttonSqrt,buttonSquare,buttonBackspace,buttonRemainder; + JPanel panel1,panel2; + Font set1=new Font("宋体",Font.BOLD,17); + Font set2=new Font("粗体",Font.BOLD,22); + Font set3=new Font("宋体",Font.BOLD,18); + public static void main(String[] args) { + try { + UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); + } + catch (Exception e) { + e.printStackTrace(); + } + Calculator cal = new Calculator(); + } +//数字按钮初始化 0-9 + public Calculator(){ + buttonNum=new JButton[10]; + for(int i=0;i<=9;i++){ + buttonNum[i]=new JButton(i+""); + buttonNum[i].setFont(set1); + } + buttonNum[0].setMnemonic(KeyEvent.VK_0); + buttonOper=new JButton[4]; + buttonOper[0]=new JButton("+"); + buttonOper[1]=new JButton("-"); + buttonOper[2]=new JButton("*"); + buttonOper[3]=new JButton("/"); + for(int i=0;i<4;i++) { + buttonOper[i].setFont(set3); + } +//设置按钮开平方,平方根,求余 + buttonSqrt=new JButton("Sqrt"); + buttonSquare=new JButton("^2"); + buttonBackspace=new JButton("c"); + buttonBackspace.setFont(set2); + buttonBackspace.setForeground(Color.red); + buttonRemainder=new JButton("%"); +//设置按钮 点,等于,清空 + buttonPoint = new JButton("."); + buttonEqual = new JButton("="); + buttonEqual.setFont(set2); + buttonEqual.setForeground(Color.orange); +//设置北部控件 + panel1 =new JPanel(); + panel1.setLayout(new BorderLayout()); + panel1.add(result_Text,BorderLayout.CENTER); + result_Text.setPreferredSize(new Dimension(100,70)); + result_Text.setFont(set3); +//设置按钮控件 + panel2 =new JPanel(); + panel2.setLayout(new GridLayout(5, 4, 5, 5)); + panel2.add(buttonBackspace); + panel2.add(buttonSqrt); + panel2.add(buttonSquare); + panel2.add(buttonRemainder); + panel2.add(buttonNum[7]); + panel2.add(buttonNum[8]); + panel2.add(buttonNum[9]); + panel2.add(buttonOper[3]); + panel2.add(buttonNum[4]); + panel2.add(buttonNum[5]); + panel2.add(buttonNum[6]); + panel2.add(buttonOper[2]); + panel2.add(buttonNum[1]); + panel2.add(buttonNum[2]); + panel2.add(buttonNum[3]); + panel2.add(buttonOper[1]); + panel2.add(buttonPoint); + panel2.add(buttonNum[0]); + panel2.add(buttonEqual); + panel2.add(buttonOper[0]); + panel2.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); +//设置主窗口属性 + x.pack(); + x.setSize(400,450); + x.setResizable(true); + x.setLocation(300,200); + x.setVisible(true); + x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +//控件加入窗体 + x.getContentPane().setLayout(new BorderLayout()); + x.getContentPane().add(panel1,BorderLayout.NORTH); + x.getContentPane().add(panel2,BorderLayout.CENTER); + result_Text.setHorizontalAlignment(JTextField.RIGHT); +//数字按钮设置监听器 + Listener_num jt_Num =new Listener_num(); + for(int i=0;i<=9;i++) { + buttonNum[i].addActionListener(jt_Num); + } +//操作符按钮设置监听器 + Listener_oper jt_Oper =new Listener_oper(); + for(int j=0;j<=3;j++) { + buttonOper[j].addActionListener(jt_Oper); + } + Listener_oper jt_Sqrt =new Listener_oper(); + buttonSqrt.addActionListener(jt_Sqrt); + Listener_oper jt_Square =new Listener_oper(); + buttonSquare.addActionListener(jt_Square); + Listener_oper jt_Remainder =new Listener_oper(); + buttonRemainder.addActionListener(jt_Remainder); +//特殊按钮设置监听器 + Listener_equal jt_Equal=new Listener_equal(); + buttonEqual.addActionListener(jt_Equal); + Listener_backspace jt_Backspace=new Listener_backspace(); + buttonBackspace .addActionListener(jt_Backspace); + Listener_point jt_Point=new Listener_point(); + buttonPoint.addActionListener(jt_Point); + x.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e){ + System.exit(0);} + }); + } + String str1="0"; + String str2="0"; + String signal="+"; + String result="="; +//k1-k5为状态开关,分别表示选择输入方向、记录符号键的次数、用于标识 str1 是否可以被清 0、用于标识 str2 是否可以被清 0、用于控制小数点可否被录入 + int k1=1; + int k2=1; + int k3=1; + int k4=1; + int k5=1; + JButton store; + @SuppressWarnings("rawtypes") + Vector v =new Vector(20,10); +//数字键的逻辑 + class Listener_num implements ActionListener { + public void actionPerformed(ActionEvent e){ + String r1=((JButton) e.getSource()).getText(); + store = (JButton) e.getSource(); + v.add(store); + if (k1 == 1) { + if (k3 == 1){ + str1=""; + k5=1; + } + str1=str1+r1; + k3=k3+1; + result_Text.setText(str1); + } + else if (k1 == k2){ + if (k4 == 1){ + str2 = ""; + k5=1; + } + str2=str2+r1; + k4=k4+1; + result_Text.setText(str2); + } + } + } +//运算键的逻辑 + class Listener_oper implements ActionListener { + public void actionPerformed(ActionEvent e){ + String r2=((JButton) e.getSource()).getText(); + store=(JButton) e.getSource(); + v.add(store); + if(k2==1){ + k1=2; + k5=1; + signal = r2; + k2=k2+1; + result_Text.setText(signal); + } + else { + int a=v.size(); + JButton c=(JButton) v.get(a-2); + if (!(c.getText().equals("+")) && !(c.getText().equals("-")) && !(c.getText().equals("*")) && !(c.getText().equals("/")) + && !(c.getText().equals("Sqart")) && !(c.getText().equals("^2")) && !(c.getText().equals("%"))){ + cal(); + str1=result; + k1=2; + k5=1; + k4=1; + signal=r2; + } + k2=k2+1; + } + } + } +//清除键的逻辑 + class Listener_backspace implements ActionListener { + public void actionPerformed(ActionEvent e){ + store=(JButton) e.getSource(); + v.add(store); + k5=1; + k2=1; + k1=1; + k3=1; + k4=1; + str1="0"; + str2="0"; + signal=""; + result=""; + result_Text.setText(result); + v.clear(); + } + } +//等于号键的逻辑 + class Listener_equal implements ActionListener { + public void actionPerformed(ActionEvent e){ + store=(JButton) e.getSource(); + v.add(store); + cal(); + k1=1; + k2=1; + k3=1; + k4=1; + str1=result; + } + } +//点号键的逻辑 + class Listener_point implements ActionListener { + @SuppressWarnings("unchecked") + public void actionPerformed(ActionEvent e){ + store=(JButton) e.getSource(); + v.add(store); + if(k5==1){ + String r2=((JButton) e.getSource()).getText(); + if(k1==1){ + if(k3==1){ + str1=""; + k5=1; + } + str1=str1+r2; + k3=k3+1; + result_Text.setText(str1); + } + else if(k1==2){ + if(k4==1){ + str2=""; + k5=1; + } + str2=str2+r2; + k4=k4+1; + result_Text.setText(str2); + } + } + k5=k5+1; + } + } +//计算逻辑的实现 + @SuppressWarnings("removal") + public void cal(){ + double a2; + double b2; + String c=signal; + double result2 = 0; + if (c.equals("")) { + result_Text.setText("Please input operator"); + } + else { + if (c.equals(".")) + str1="0.0"; + if (c.equals(".")) + str2="0.0"; + a2=Double.valueOf(str1).doubleValue(); + b2=Double.valueOf(str2).doubleValue(); + if (c.equals("+")) + result2=a2+b2; + if (c.equals("-")) + result2=a2-b2; + if (c.equals("*")){ + BigDecimal m1=new BigDecimal(Double.toString(a2)); + BigDecimal m2=new BigDecimal(Double.toString(b2)); + result2=m1.multiply(m2).doubleValue(); + } + if (c.equals("/")){ + if(b2==0){ + result2=0; + } + else { + result2=a2/b2; + } + } + if (c.equals("Sqrt")){ + result2=Math.sqrt(a2); + } + if (c.equals("^2")){ + result2=a2*a2; + } + if (c.equals("^3")){ + result2=a2*a2*a2; + } + if (c.equals("%")){ + if(b2==0){ + result2=0; + } + else { + result2=a2%b2; + } + } + result=((new Double(result2)).toString()); + result_Text.setText(result); + } + } + } \ No newline at end of file -- Gitee From ccbdd3a071cc5ee9b021929bcc36611faff6fef4 Mon Sep 17 00:00:00 2001 From: PC Date: Wed, 8 Jun 2022 16:13:34 +0800 Subject: [PATCH 2/2] 111 --- src/java2022spring/Calculator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java2022spring/Calculator.java b/src/java2022spring/Calculator.java index ad0fc22..41f08fa 100644 --- a/src/java2022spring/Calculator.java +++ b/src/java2022spring/Calculator.java @@ -35,7 +35,7 @@ class Calculator { Calculator cal = new Calculator(); } //数字按钮初始化 0-9 - public Calculator(){ + public Calculator() { buttonNum=new JButton[10]; for(int i=0;i<=9;i++){ buttonNum[i]=new JButton(i+""); -- Gitee