总结:还是那个不懂代码放在哪里好?不知道怎么定义一些关键性变量。比如boolean 型的。
package com.sads; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class Test { public static void main(String[] args) { calc c = new calc(); } } class calc extends JFrame implements ActionListener { JPanel jp; JButton jb1, jb2, jb3, jb4, jb5, jb6, jb7, jb8, jb9, jb0, jb_jia, jb_jian, jb_cheng, jb_chu, jb_dian, jb_deng; String str;// 定义一个字符串 double num1 = 0; double num2 = 0; char c = ' '; double pp = 0;// 这里又不知道是什么东西::??你妹的 boolean ready = true; JLabel jf; calc() { jf = new JLabel("0.0"); jf.setFont(new Font("", 1, 18)); jf.setHorizontalAlignment(JLabel.RIGHT); jp = new JPanel(new GridLayout(4, 4)); jb1 = new JButton("1"); jb2 = new JButton("2"); jb3 = new JButton("3"); jb_jia = new JButton("+"); jb_jia.addActionListener(this); jb4 = new JButton("4"); jb5 = new JButton("5"); jb6 = new JButton("6"); jb_jian = new JButton("-"); jb_jian.addActionListener(this); jb7 = new JButton("7"); jb8 = new JButton("8"); jb9 = new JButton("9"); jb0 = new JButton("0"); jb_cheng = new JButton("*"); jb_cheng.addActionListener(this); jb_chu = new JButton("/"); jb_chu.addActionListener(this); jb_deng = new JButton("="); jb_deng.addActionListener(this); jb_dian = new JButton("."); jb_dian.addActionListener(this); // jp.add(jf); jf.setBackground(Color.yellow); jp.add(jb1); jb1.addActionListener(this);// 需经过多次尝试,这是简单的几个按钮触发的时候会产生动作,说明只是几个按钮注册了监听。所以要想 jb2.addActionListener(this);// 所有的按钮起作用,那么必须所有的按钮都注册了监听事件 jb3.addActionListener(this); jb4.addActionListener(this); jb5.addActionListener(this); jb6.addActionListener(this); jb7.addActionListener(this); jb8.addActionListener(this); jb9.addActionListener(this); jb0.addActionListener(this); jp.add(jb2); jp.add(jb3); jp.add(jb_jia); jp.add(jb4); jp.add(jb5); jp.add(jb6); jp.add(jb_jian); jp.add(jb7); jp.add(jb8); jp.add(jb9); jp.add(jb_cheng); jp.add(jb0); jp.add(jb_chu); jp.add(jb_dian); jp.add(jb_deng); this.add(jf, BorderLayout.NORTH);// 在这里我写错了,我把文本框add到了panel里了。如果放在panel里那么就与按钮一样式流式布局 this.add(jp); // 无论如何也不会是放在最上方, this.setBounds(100, 10, 300, 200); this.setDefaultCloseOperation(3); this.setVisible(true); this.setResizable(false);// 这里设置窗体的大小不可变。 } @Override public void actionPerformed(ActionEvent e) { str = e.getActionCommand();// 获取所有字符串,包括+ - * / 数字 if (str.equals("0") || str.equals("1") || str.equals("2") || str.equals("3") || str.equals("4") || str.equals("5") || str.equals("6") || str.equals("7") || str.equals("9") || str.equals("8") || str.equals("0") || str.equals(".")) { if (ready) { jf.setText(str);// 获取到数字,也就是从文本框显示出来 ready = false; } else { jf.setText(jf.getText() + str); ready = false;// 这里不用加boolean.一定不能加 } } else if (str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/")) { // 这里的作用是当我们点击了一个符号后,能够实现真的点击了其中的一个运算符号 num1 = Double.parseDouble(jf.getText()); c = str.charAt(0);// 这里依旧是字符型的 ready = true;// 这里第一个数和第二个数是连续输入的,分不开,所以是默认要执行下去,会有点不正常,之后又是正常的 // boolean ready = true;// 你妹我又错了,习惯定义为boolean值 这是乱代码完全不合逻辑性的 // jf.setText("");//这里把所有的文本框内容都清空了。不对,只对 } else if (str.equals("=")) { num2 = Double.parseDouble(jf.getText()); switch (c) { case '+': pp = (num1 + num2); break; case '-':// num1-num2 pp = (num1 - num2); break; case '*':// num1*num2 pp = (num1 * num2); break; case '/':// num1/num2 pp = (num1 / num2); break; } jf.setText(pp + " ");// 这里是将字符转换成字符串 ready = true;// 这里是清空的功能,下次输入数字的时候 文本框是重新输入的,并且计算后不是接着计算 // 所以这里我是可以继续计算的,方便 } // + - * / // num1=Double.parseDouble(jf.getText());//将字符串转换为double型 // num2=Double.parseDouble(jf.getText());//这里面是个String型----不能这么搞,因为会不知道点击的是哪个数?------- // char c=' ';//这是装所有的运算符 -当用户点击+ 那么就是加,///当用户点击-那么就是-//当用户点击*,那么就是* // 定义的按钮符号都是用来监听的,我感觉都没用到, // 感觉这个运算符号跟没装是一样的。 } }