import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;public class Calculator extends Frame {

private double value = 0.0;
private String fuhao = "";
private String valueString = "0";
private int flag = 0;

Button[] b = new Button[18];
JPanel jp = new JPanel();
JTextField tf = new JTextField("0", 20);

public static void main(String[] args) {
Calculator cal = new Calculator();
cal.launchframe();
} public void launchframe() {
this.setTitle("计算器 V1.0");
this.setVisible(true);
this.setResizable(false);
this.setBounds(450, 150, 230, 320); jp.setLayout(new GridLayout(5, 4));
this.add(jp);
Draw(); MenuBar mb = new MenuBar();
this.setMenuBar(mb);
Menu m1 = new Menu("文件");
Menu m2 = new Menu("帮助");
mb.add(m1);
mb.add(m2);
MenuItem mi11 = new MenuItem("保存结果");
MenuItem mi12 = new MenuItem("退出");
MenuItem mi2 = new MenuItem("关于计算器");
m1.add(mi11);
m1.add(mi12);
m2.add(mi2);
mi11.addActionListener(new Mb1());
mi12.addActionListener(new Mb1());
mi2.addActionListener(new Mb2());
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} public void Draw() {
String str[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+",
"-", "*", "/", ".", "%", "C", "=", };
for (int i = 0; i < b.length; i++) {
b[i] = new Button(str[i]);
jp.add(b[i]);
b[i].addActionListener(new Btn());
}
this.add(tf, BorderLayout.NORTH); } public class Btn implements ActionListener { public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand(); if ("0123456789".indexOf(s) != -1) {
if (flag == 1) {
flag = 2;//第二次输入数字的时候修改flag的值,影响=号
valueString = "0";
}
if (s.equals(".") && valueString.indexOf(".") == -1) {
valueString += s;
} else {
valueString += s;//数字赋值
}
if (valueString.startsWith("0")) {
valueString = valueString.substring(1);//覆盖初始时的0
}
} else if ("+-*/".indexOf(s) != -1) {
if (flag == 0) {
flag = 1;//第一次输入数字修改flag的值
value = Double.parseDouble(valueString);//value里保存valueString里第一次输入的数值
} else if (flag == 2) {
jisuan(valueString, value, fuhao);
flag = 1;
}
fuhao = s;
} else if ("=".equals(s)) {
if (flag == 2) {
jisuan(valueString, value, fuhao);
}
flag = 0;//初始化
} else if ("C".equals(s)) {
value = 0.0;
fuhao = "";
valueString = "0";
flag = 0;
}
showValueString();

}
}
private void showValueString() {
tf.setText(valueString);

} private void jisuan(String valueString, double value, String fuhao) {
double v = Double.parseDouble(valueString);
double sum = 0;
if (fuhao == "+") {
sum = v + value;
} else if (fuhao == "-") {
sum = v - value;
} else if (fuhao == "*") {
sum = v * value;
} else if (fuhao == "/") {
sum = v % value;
}
valueString = sum + "";
System.out.println(sum);
} class Mb1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
} class Mb2 extends JFrame implements ActionListener {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,
"", "信息",
JOptionPane.PLAIN_MESSAGE);
}
}
}通过System.out.println(sum);已经能显示出结果,但是为什么不能在TextField中显示呢

解决方案 »

  1.   

    你方法参数和类成员变量重名了改一下就可以了。 private void jisuan(String valueString1, double value, String fuhao) {
    double v = Double.parseDouble(valueString1);
      

  2.   


    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JTextField;public class Calculator extends Frame {
        
        private double value = 0.0;
        private String fuhao = "";
        private String valueString = "0";
        private int flag = 0;
        
        Button[] b = new Button[18];
        JPanel jp = new JPanel();
        JTextField tf = new JTextField("0", 20);
        
        public static void main(String[] args) {
            Calculator cal = new Calculator();
            cal.launchframe();
        }    public void launchframe() {
            this.setTitle("计算器 V1.0");
            this.setVisible(true);
            this.setResizable(false);
            this.setBounds(450, 150, 230, 320);        jp.setLayout(new GridLayout(5, 4));
            this.add(jp);
            Draw();        MenuBar mb = new MenuBar();
            this.setMenuBar(mb);
            Menu m1 = new Menu("文件");
            Menu m2 = new Menu("帮助");
            mb.add(m1);
            mb.add(m2);
            MenuItem mi11 = new MenuItem("保存结果");
            MenuItem mi12 = new MenuItem("退出");
            MenuItem mi2 = new MenuItem("关于计算器");
            m1.add(mi11);
            m1.add(mi12);
            m2.add(mi2);
            mi11.addActionListener(new Mb1());
            mi12.addActionListener(new Mb1());
            mi2.addActionListener(new Mb2());
            this.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
        }    public void Draw() {
            String str[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+",
                    "-", "*", "/", ".", "%", "C", "=", };
            for (int i = 0; i < b.length; i++) {
                b[i] = new Button(str[i]);
                jp.add(b[i]);
                b[i].addActionListener(new Btn());
            }
            this.add(tf, BorderLayout.NORTH);    }    public class Btn implements ActionListener {        public void actionPerformed(ActionEvent e) {
                String s = e.getActionCommand();            if ("0123456789".indexOf(s) != -1) {
                    if (flag == 1) {
                        flag = 2;//第二次输入数字的时候修改flag的值,影响=号
                        valueString = "0";
                    }
                    if (s.equals(".") && valueString.indexOf(".") == -1) {
                        valueString += s;
                    } else {
                        valueString += s;//数字赋值
                        }
                    if (valueString.startsWith("0")) {
                        valueString = valueString.substring(1);//覆盖初始时的0
                    }
                } else if ("+-*/".indexOf(s) != -1) {
                    if (flag == 0) {
                        flag = 1;//第一次输入数字修改flag的值
                        value = Double.parseDouble(valueString);//value里保存valueString里第一次输入的数值
                } else if (flag == 2) {
                        jisuan(valueString, value, fuhao);
                        flag = 1;    
                    }
                    fuhao = s;
                } else if ("=".equals(s)) {
                    if (flag == 2) {
                        jisuan(valueString, value, fuhao);
                    }
                    flag = 0;//初始化
                } else if ("C".equals(s)) {
                    value = 0.0;
                    fuhao = "";
                    valueString = "0";
                    flag = 0;
                }
                showValueString(valueString);
                
            }
        }
        private void showValueString(String valueString) {
            tf.setText(valueString);
            
        }    private void jisuan(String valueString, double value, String fuhao) {
            double v = Double.parseDouble(valueString);
            double sum = 0;
            if (fuhao == "+") {
                sum = v + value;
            } else if (fuhao == "-") {
                sum = v - value;
            } else if (fuhao == "*") {
                sum = v * value;
            } else if (fuhao == "/") {
                sum = v % value;
            }
            this.valueString = Double.toString(sum);//这步出问题了。
    System.out.println(this.valueString);
        }    class Mb1 implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        }    class Mb2 extends JFrame implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,
                        "", "信息",
                        JOptionPane.PLAIN_MESSAGE);
            }
        }
    }
      

  3.   

    改成this.valueString就能显示出来了。原因是你要把类的属性valueString修改,而你只是改了形参
      

  4.   

    大家有没有发现这个程序有个重大的BUG…………当用一个数减另一个数的时候