2 qq 27626645 qq_27626645 于 2016.02.13 11:16 提问

java 简易计算器,最后得数不能出现,求大神帮忙

(1)编写一个简易计算器程序,其界面如下图所示:
图片说明
(2)当按下“+”按钮时,两个数值文本框之间应显示“+”号,同时相加结果显示在第三个文本框内(如下图所示)。类似处理“-”、“*”和“/”按钮。
现在第二步能够出现加号 就是不能正确运算。如下代码,注释的地方为什么不能运行,该怎么做才能做到当按下加的按钮b1时,同时出现加号和得数?这里的tf和tf1是要计算的两个数

```b1.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            Object obj=e.getSource();
            //int a=Integer.getInteger(tf.getText());
            //int b=Integer.getInteger(tf1.getText());
            //int result;
            //result=a+b;
            if(obj==b1){


                //tf2.setText(Integer.toString(result));
                l1.setText("+");
            }

        }
    });



`

3个回答

fk002008
fk002008   2016.02.13 17:51
已采纳

现在不能设计上述的第二步
建议采用分而治之的思想

1--首先要进行运算,那么你就设计运算的类Operator
它里面有 add minus等计算方法能够实现我们的运算.
这个可以融合工厂方法模式和单例模式设计,有兴趣可以了解下

2--为了把操作符显示到界面上面,你需要定义一个lable的控件在2个输入框之间,类似你定义的等号一样
后面可以改变lable的值
建议你把这个界面的表示都写在property文件中,然后程序从property文件中读取界面的表示文字。
可以了解下程序如何读取propertiy文件的内容

3--为了能够使按钮触发事件动起来,你要注册监听器
可以使用你这个界面类自身充当监听器
在你的类头处加上 implements ActionListener
然后让button注册监听器
plus.addActionListener(this);
minus.addActionListener(this);
...
...
然后实现接口方法
public void actionPerformed(ActionEvent e){
//加法按钮压下
if(e.getSource()==plus){
//先把那个lable的文字显示成这个+
lable.setText("+");

            } else if(e.getSource == minus){
                ....
            }...

                    //然后读取两个text框中的数字
                    //然后调用你那个Operator类进行对应的运算
                    //把结果写到这个输出框中
    }
fk002008
fk002008 getInteger的注释Determines the integer value of the system property with the specified name 读取系统属性的变量 通过 java.lang.System#getProperty来进行读取的
接近 2 年之前 回复
fk002008
fk002008 nteger.getInteger(tf.getText()) 错了 改成 Integer.parseInt进行 转换。 使用这个getInteger你得出的值是null
接近 2 年之前 回复
fk002008
fk002008 回复forhusa---: 你使用了匿名内部类的话,每一个button都要这么写。每一个button都有对应的监听器,所以内部就不用这个e.getSource();进行判断事件源了。将这个if(obj==b1)的判断去掉)
接近 2 年之前 回复
qq_27626645
qq_27626645 现在不能出得数 求大神帮忙
接近 2 年之前 回复
qq_27626645
qq_27626645 b1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Object obj=e.getSource(); //int a=Integer.getInteger(tf.getText()); //int b=Integer.getInteger(tf1.getText()); //int result; //result=a+b; if(obj==b1){ //tf2.setText(Integer.toString(result)); l1.setText("+"); } } });
接近 2 年之前 回复
qq_27626645
qq_27626645 b1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Object obj=e.getSource(); //int a=Integer.getInteger(tf.getText()); //int b=Integer.getInteger(tf1.getText()); //int result; //result=a+b; if(obj==b1){ //tf2.setText(Integer.toString(result)); l1.setText("+"); } } });
接近 2 年之前 回复
qq_27626645
qq_27626645 b1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Object obj=e.getSource(); //int a=Integer.getInteger(tf.getText()); //int b=Integer.getInteger(tf1.getText()); //int result; //result=a+b; if(obj==b1){ //tf2.setText(Integer.toString(result)); l1.setText("+"); } } });
接近 2 年之前 回复
qq_27626645
qq_27626645 b1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Object obj=e.getSource(); //int a=Integer.getInteger(tf.getText()); //int b=Integer.getInteger(tf1.getText()); //int result; //result=a+b; if(obj==b1){ //tf2.setText(Integer.toString(result)); l1.setText("+"); } } });
接近 2 年之前 回复
qq_27626645
qq_27626645 b1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Object obj=e.getSource(); //int a=Integer.getInteger(tf.getText()); //int b=Integer.getInteger(tf1.getText()); //int result; //result=a+b; if(obj==b1){ //tf2.setText(Integer.toString(result)); l1.setText("+"); } } });
接近 2 年之前 回复
leaf_130
leaf_130   2016.02.13 11:27

我没记错是课本上的一道例题
其实就是按钮与事件的绑定:按下 plus 在两个数值文本框之间显示+号,你只需要定义一个label于两个数值文本框中间,
当点击按钮“plus”触发响应事件,将该label的值改为 “+” 即可(其他同理)

91program
91program   Ds   Rxr 2016.02.13 12:53

符号处放一个类似于 = 号处的控件,一般是 Label。
整个过程需要完成对 Label 和三个 Edit 控件的赋值和获取其中内容的过程。
只需要搞清楚一个,如 + 的实现过程,其它就简单了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!