package com.jisuanqi;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;public class Jisuanqi implements ActionListener { // 定义成员变量
private JFrame jf;
private JPanel jp1;
private JPanel jp2;
private JPanel jp3;
private JButton[] jb;
private JTextField jt; public Jisuanqi() {
jf = new JFrame();
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jt = new JTextField(15);
jb = new JButton[17]; jb[0] = new JButton("7");
jb[1] = new JButton("8");
jb[2] = new JButton("9");
jb[3] = new JButton("+");
jb[3].setForeground(Color.red); // 设置按钮上字的颜色 jb[4] = new JButton("4");
jb[5] = new JButton("5");
jb[6] = new JButton("6");
jb[7] = new JButton("-");
jb[7].setForeground(Color.red); jb[8] = new JButton("1");
jb[9] = new JButton("2");
jb[10] = new JButton("3");
jb[11] = new JButton("*");
jb[11].setForeground(Color.red); jb[12] = new JButton("0");
jb[13] = new JButton(".");
jb[14] = new JButton("=");
jb[15] = new JButton("/");
jb[15].setForeground(Color.red);
jb[16] = new JButton("C");
jb[16].setForeground(Color.red); jp2.setLayout(new GridLayout(5, 4)); // 添加组件
for (int i = 0; i < jb.length; i++) {
jp2.add(jb[i]);
jb[i].addActionListener(this);
}
jp1.add(jt);
jp3.add(jp1, BorderLayout.SOUTH);
jp3.add(jp2, BorderLayout.NORTH); // 设置窗口的属性
jf.add(jp3);
jf.setTitle("计算器");
jf.setLocation(520, 300);
jf.setSize(173, 200);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setResizable(false);
jf.setVisible(true); } public static void main(String[] args) {
Jisuanqi j = new Jisuanqi();
} @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object obj = e.getSource();
JButton jb = (JButton) (obj);
String s = jb.getText(); double f = 0; String[] a;
String b;
if (e.getSource() != null) { if(!e.getSource().equals("=")){
jt.setText(jt.getText() + s);
}else{ if (jt.getText().indexOf("+") > 0) {
a = jt.getText().split("+");
f = Double.parseDouble(a[0]) + Double.parseDouble(a[1]);
b = "" + f;
jt.setText(b);
jt.getText();

}
if (jt.getText().indexOf("-") > 0) {
a = jt.getText().split("-");
f = Double.parseDouble(a[0]) - Double.parseDouble(a[1]);
b = "" + f;
jt.setText(b);
jt.getText();

}
if (jt.getText().indexOf("*") > 0) {
a = jt.getText().split("*");
f = Double.parseDouble(a[0]) * Double.parseDouble(a[1]);
b = "" + f;
jt.setText(b);
jt.getText();

}
if (jt.getText().indexOf("/") > 0) {
try {
a = jt.getText().split("/");
f = Double.parseDouble(a[0])
/ Double.parseDouble(a[1]);
b = "" + f;
jt.setText(b);
jt.getText();

} catch (Exception e2) {
// TODO: handle exception
jt.setText("除数不能为0");
jt.getText();
}
}
if (e.getSource().equals("C")) {
jt.setText(" ");
jt.getText();
}

}
} //else if (e.getSource() != null && e.getSource().equals("=")) {
// if (e.getSource().equals("=")) {
//
// }
//
// } else 
}
}
弄了好半天就是只能在输入框打出你按的按钮的值,老是不能计算,求大神帮看下,谢谢了

解决方案 »

  1.   

    actionPerformed里面逻辑处理不对。。
      

  2.   

    首先,楼上那不是废话,
    第二,我不建议使用Double来计划,Double存在精度的问题,比如你做个试验
    System.out.println(2.00-1.90);看看结果为多少,
    第三,楼主对对象的概念还是不清晰,e.getSource().equals("="),这两者怎么可能比较呢。。改了这一点就可以运行了计算了,
    第四,即使运行还是有可能会报错,原因是+需要转义,
    大体上调了一下,加减乘除没问题了,但是BUG还是很多,望楼主继续修改,楼主的界面还是做得蛮不错的。public class Test2 implements ActionListener { // 定义成员变量
    private JFrame jf;
    private JPanel jp1;
    private JPanel jp2;
    private JPanel jp3;
    private JButton[] jb;
    private JTextField jt; public Test2() {
    jf = new JFrame();
    jp1 = new JPanel();
    jp2 = new JPanel();
    jp3 = new JPanel();
    jt = new JTextField(15);
    jb = new JButton[17];
    jb[0] = new JButton("7");
    jb[1] = new JButton("8");
    jb[2] = new JButton("9");
    jb[3] = new JButton("+");
    jb[3].setForeground(Color.red);
    // 设置按钮上字的颜色
    jb[4] = new JButton("4");
    jb[5] = new JButton("5");
    jb[6] = new JButton("6");
    jb[7] = new JButton("-");
    jb[7].setForeground(Color.red);
    jb[8] = new JButton("1");
    jb[9] = new JButton("2");
    jb[10] = new JButton("3");
    jb[11] = new JButton("*");
    jb[11].setForeground(Color.red);
    jb[12] = new JButton("0");
    jb[13] = new JButton(".");
    jb[14] = new JButton("=");
    jb[15] = new JButton("/");
    jb[15].setForeground(Color.red);
    jb[16] = new JButton("C");
    jb[16].setForeground(Color.red);
    jp2.setLayout(new GridLayout(5, 4));
    // 添加组件
    for (int i = 0; i < jb.length; i++) {
    jp2.add(jb[i]);
    jb[i].addActionListener(this);
    }
    jp1.add(jt);
    jp3.add(jp1, BorderLayout.SOUTH);
    jp3.add(jp2, BorderLayout.NORTH);
    // 设置窗口的属性
    jf.add(jp3);
    jf.setTitle("计算器");
    jf.setLocation(520, 300);
    jf.setSize(173, 200);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setResizable(false);
    jf.setVisible(true);
    } public static void main(String[] args) {
    Test2 j = new Test2();
    } @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    Object obj = e.getSource();
    JButton jb = (JButton) (obj);
    String  s= jb.getText();
    System.out.println(s);
    double f = 0;
    String[] a;
    String b;
    if (s != null) {
    if (!s.equals("=")) {
    jt.setText(jt.getText() + s);
    } else {
    if (jt.getText().indexOf("+") > 0) {
    System.out.println(jt.getText());
    a = jt.getText().split("\\+");
    f = Double.parseDouble(a[0]) + Double.parseDouble(a[1]);
    b = "" + f;
    jt.setText(b);
    jt.getText();
    }
    if (jt.getText().indexOf("-") > 0) {
    a = jt.getText().split("-");
    f = Double.parseDouble(a[0]) - Double.parseDouble(a[1]);
    b = "" + f;
    jt.setText(b);
    jt.getText();
    }
    if (jt.getText().indexOf("*") > 0) {
    a = jt.getText().split("*");
    f = Double.parseDouble(a[0]) * Double.parseDouble(a[1]);
    b = "" + f;
    jt.setText(b);
    jt.getText();
    }
    if (jt.getText().indexOf("/") > 0) {
    try {
    a = jt.getText().split("/");
    f = Double.parseDouble(a[0]) / Double.parseDouble(a[1]);
    b = "" + f;
    jt.setText(b);
    jt.getText();
    } catch (Exception e2) {
    // TODO: handle exception
    jt.setText("除数不能为0");
    jt.getText();
    }
    }
    if (e.getSource().equals("C")) {
    jt.setText(" ");
    jt.getText();
    }
    }
    }
    }
    }