java - 如何更改计算器上的结果 "0"?

标签 java eclipse swing calculator

我是 Java 的新手,我正在尝试制作一个计算器,但我对结果有疑问。它始终为“0”。我将 Eclipse 与 Swing 一起使用。我的代码是这样的:

package calculator1;

import java.awt.BorderLayout;

public class MainForm extends JFrame {

private JPanel contentPane;
private JTextField textResult;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                MainForm frame = new MainForm();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

double number1=0;
double number2=0;
String islem="";



/**
 * Create the frame.
 */
public MainForm() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 509, 534);
    contentPane = new JPanel();
    contentPane.setBackground(Color.BLACK);
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);

    textResult = new JTextField();
    textResult.setEditable(false);

    textResult.setBounds(5, 5, 486, 42);
    textResult.setColumns(10);

    JButton btn1 = new JButton("1");
    btn1.setBounds(45, 105, 80, 80);
    btn1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(islem.equals(""));
            textResult.setText("");

            textResult.setText(textResult.getText()+"1");
        }
    });

    JButton btn4 = new JButton("4");
    btn4.setBounds(45, 185, 80, 80);
    btn4.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(islem.equals(""));
            textResult.setText("");

            textResult.setText(textResult.getText()+"4");
        }
    });

    JButton btn7 = new JButton("7");
    btn7.setBounds(45, 265, 80, 80);
    btn7.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(islem.equals(""));
            textResult.setText("");

            textResult.setText(textResult.getText()+"7");
        }
    });


    JButton btn5 = new JButton("5");
    btn5.setBounds(125, 185, 80, 80);
    btn5.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(islem.equals(""));
            textResult.setText("");
            textResult.setText(textResult.getText()+"5");
        }
    });

    JButton btn8 = new JButton("8");
    btn8.setBounds(125, 265, 80, 80);
    btn8.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(islem.equals(""));
            textResult.setText("");
            textResult.setText(textResult.getText()+"8");
        }
    });

    JButton btn2 = new JButton("2");
    btn2.setBounds(125, 105, 80, 80);
    btn2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(islem.equals(""));
            textResult.setText("");
            textResult.setText(textResult.getText()+"2");
        }
    });

    JButton btn3 = new JButton("3");
    btn3.setBounds(205, 105, 80, 80);
    btn3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(islem.equals(""));
            textResult.setText("");
            textResult.setText(textResult.getText()+"3");
        }
    });

    JButton btn6 = new JButton("6");
    btn6.setBounds(205, 185, 80, 80);
    btn6.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(islem.equals(""));
            textResult.setText("");
            textResult.setText(textResult.getText()+"6");
        }
    });

    JButton btn9 = new JButton("9");
    btn9.setForeground(Color.BLACK);
    btn9.setBounds(205, 265, 80, 80);
    btn9.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(islem.equals(""));
            textResult.setText("");
            textResult.setText(textResult.getText()+"9");
        }
    });

    JButton btn0 = new JButton("0");
    btn0.setBounds(125, 345, 80, 80);
    btn0.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(islem.equals(""));
            textResult.setText("");
            textResult.setText(textResult.getText()+"0");
        }
    });

    JButton btncarp = new JButton("*");
    btncarp.setFont(new Font("Tahoma", Font.PLAIN, 35));
    btncarp.setBounds(382, 60, 80, 80);
    btn0.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            islem="*";
            number1=Double.parseDouble(textResult.getText());

        }
    });

    JButton btnarti = new JButton("+");
    btnarti.setFont(new Font("Tahoma", Font.PLAIN, 35));
    btnarti.setBounds(285, 265, 80, 80);
    btn0.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            islem="+";
            number1=Double.parseDouble(textResult.getText());

        }
    });

    JButton btneksi = new JButton("-");
    btneksi.setFont(new Font("Tahoma", Font.PLAIN, 35));
    btneksi.setBounds(285, 105, 80, 80);
    btn0.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            islem="-";
            number1=Double.parseDouble(textResult.getText());

        }
    });

    JButton btnbolu = new JButton("/");
    btnbolu.setFont(new Font("Tahoma", Font.PLAIN, 35));
    btnbolu.setBounds(285, 185, 80, 80);
    btn0.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            islem="/";
            number1=Double.parseDouble(textResult.getText());

        }
    });

    JButton btnesittir = new JButton("=");
    btnesittir.setForeground(new Color(255, 153, 255));
    btnesittir.setFont(new Font("Tahoma", Font.PLAIN, 35));
    btnesittir.setBounds(285, 345, 80, 80);
    btnesittir.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {


            number1=Double.parseDouble(textResult.getText());
            number2=Double.parseDouble(textResult.getText());




            **double result=0;**

            switch (islem) {
            case "*":
             result=number1*number2;

                break;

            case "/":
                 result=number1/number2;

                break;

            case "+":
                 result=number1+number2;

                break;

            case "-":
                 result=number1-number2;

                break;

            default:


                break;




            } //end switch 


            **textResult.setText(String.valueOf(result));**
            islem="";

        }
    });
    contentPane.setLayout(null);
    contentPane.add(textResult);
    contentPane.add(btn1);
    contentPane.add(btn4);
    contentPane.add(btn7);
    contentPane.add(btn5);
    contentPane.add(btn8);
    contentPane.add(btn2);
    contentPane.add(btn3);
    contentPane.add(btn6);
    contentPane.add(btn9);
    contentPane.add(btn0);
    contentPane.add(btncarp);
    contentPane.add(btnesittir);


    contentPane.add(btnarti);


    contentPane.add(btneksi);


    contentPane.add(btnbolu);




}
}

我可以写什么来代替“double result=0;” ?

或者我可能需要更改其他内容?

最佳答案

你的逻辑好像有点问题,看看...

number1 = Double.parseDouble(textResult.getText());
number2 = Double.parseDouble(textResult.getText());

这两个数字有何不同,您从同一来源获取了值 (textResult)

每次用户按下数字键时,您都将 islem 设置为 "",因此如果用户按下 1+ 2islem 现在是 ""...

现在的问题是,如何修复...

您需要更改您的逻辑,而不是等到用户按下 = 按钮,您可以在输入值时执行每个计算...

这意味着您需要某种方法来维护运行结果并执行所需的计算

例如……

protected void performOperation(double value) {
    switch (islem) {
        case "*":
            result *= value;
            break;
        case "/":
            result /= value;
            break;
        case "+":
            result += value;
            break;
        case "-":
            result -= value;
            break;
        default:
            result = value;
    } //end switch 
    islem = "";
    textResult.setText(String.valueOf(result));
}

它的作用是获取要计算的值,确定需要执行的计算(如果有),更新 textResult 字段并保留计算修饰符...

您可能需要更改所有数字按钮以使用适当的值调用此方法,例如...

JButton btn1 = new JButton("1");
btn1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        performOperation(1);
    }
});

现在,在您的原始代码中,您所有的修改按钮都没有执行任何操作...这是因为您一直将那里的操作注册到 btn0,所以您需要修复该问题...

JButton btneksi = new JButton("-");
//...
btn0.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        islem="-";
        number1=Double.parseDouble(textResult.getText());

    }
});

他们现在应该设置他们需要使用的计算修改器......

JButton btncarp = new JButton("*");
//...
btncarp.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        islem = "*";
    }
});

哪个应该可以解决您似乎遇到的核心问题...

您可能还想看看 How to Use Actions了解更多详情

关于java - 如何更改计算器上的结果 "0"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25759986/

相关文章:

java - 向上或向下移动自定义数组项

Android:如何知道运行我的 Android 应用程序所需的最低 API 是什么?

Java 文件在 eclipse 中运行,但在命令行上运行

java - OverlayLayout 不遵循焦点更改时的叠加顺序

java - 多个 JSpinners 以不同方式初始化

java - 我厌倦了 JButtons,如何在 java 中制作更好的 GUI?

java - RxJava 订阅时类型不匹配

java - 将对象添加到带有字符串的列表中

Java notifyAll 没有立即醒来

eclipse - 为什么搜索时Eclipse 'filter results from view'?