Java Eclipse中的第一个Calculator GUI

时间:2017-07-02 06:23:40

标签: java user-interface calculator

嘿伙计们我的减法按钮和我的分区按钮无法正常工作,不知道我做错了什么..让我知道你是否可以指导我这样我可以纠正我的代码! - 本:)

enter code here   
package week07_Ben_Calculator;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class AdvancedCalculatorGUI实现了ActionListener {

JFrame frame;
JPanel butPanel;
JTextField res;
JTextField res2;
int oper = 0;
int currentCalc;
double last;
int memory = 0;

public static void main(String[] args) {
    // Invocation
    EventQueue.invokeLater(new Runnable() {
        // Override run
        @Override
        public void run() {
            // Call constructor
            new AdvancedCalculatorGUI();
        }
    });

}

// Create GUI
public AdvancedCalculatorGUI() {
    frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Calculator");
    frame.setSize(400, 400);
    frame.setLocationRelativeTo(null);
    // New text field
    res = new JTextField();
    res.setHorizontalAlignment(JTextField.RIGHT);
    res.setEditable(false);
    frame.add(res, BorderLayout.NORTH);
    butPanel = new JPanel();
    // 2nd text field 
    res2 = new JTextField();
    res2.setHorizontalAlignment(JTextField.LEFT);
    res2.setEditable(false);
    frame.add(res2, BorderLayout.SOUTH);

    // Create grid
    butPanel.setLayout(new GridLayout(6, 3));
    frame.add(butPanel, BorderLayout.CENTER);
    // Add button
    for (int i = 0; i < 10; i++) {
        addButton(butPanel, String.valueOf(i));
    }
    //read button 
    JButton readButton = new JButton("Read");
    readButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            memory = Integer.parseInt(res.getText());
            res.setText("");
        }
    });

    //store button
    JButton storeButton = new JButton("Store");

storeButton.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent e) {

            res.setText(memory+"");
        }
    });

    // Add button +
    JButton additionButton = new JButton("+");
    //additionButton.setActionCommand("+");
    additionButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent ev) {

        oper = 1;
        res2.setText(res2.getText()+"+");}
    });
    operAct additionAction = new operAct(1);
    additionButton.addActionListener(additionAction);
    // Subtract button
    JButton subtractionButton = new JButton("-");
    subtractionButton.setActionCommand("-");
    subtractionButton.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent ev) {

    oper = 1;
    res2.setText(res2.getText()+"-");}
});

    operAct subtractionAction = new operAct(2);
    subtractionButton.addActionListener(subtractionAction);
    // Equal button
    JButton eqButton = new JButton("=");
    eqButton.setActionCommand("=");
    eqButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ev) {
            System.out.println(oper);
            if (!res.getText().isEmpty()) {
                int number = Integer.parseInt(res.getText());
                if (oper == 1) {
                    int value = currentCalc + number;
                    last = value;
                    res.setText(Integer.toString(value));
                    res2.setText(res2.getText()+ "=" + Integer.toString(value));
                } else if (oper == 2) {
                    int value = currentCalc - number;
                    last = value;
                    res.setText(Integer.toString(value));
                    res2.setText(res2.getText()+ "=" + Integer.toString(value));
                } else if (oper == 3) {
                    int value = currentCalc * number;
                    last = value;
                    res.setText(Integer.toString(value));
                    res2.setText(res2.getText()+ "=" + Integer.toString(value));
                } else if (oper == 4) {
                    if (number == 0)
                        res.setText("ERR");
                    double value = currentCalc / number;
                    last = value;
                    res.setText(Double.toString(value));
                    res2.setText(res2.getText()+ "=" + Double.toString(value));
                }
            }
        }
    });

    // multiplication button
    JButton mulButton = new JButton("*");
    mulButton.setActionCommand("*");
    mulButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent ev) {

        oper = 1;
        res2.setText(res2.getText()+"*");}
    });

    operAct mulAction = new operAct(3);
    mulButton.addActionListener(mulAction);
    // division button
    JButton divButton = new JButton("/");
    divButton.setActionCommand("/");
    divButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent ev) {

        oper = 1;
        res2.setText(res2.getText()+"/");}
    });

    operAct divAction = new operAct(4);
    divButton.addActionListener(divAction);
    butPanel.add(additionButton);
    butPanel.add(subtractionButton);
    butPanel.add(eqButton);
    butPanel.add(mulButton);
    butPanel.add(divButton);
    butPanel.add(readButton);
    butPanel.add(storeButton);
    frame.setVisible(true);
}

private void addButton(Container par, String nam) {
    JButton b = new JButton(nam);
    b.setActionCommand(nam);
    b.addActionListener(this);
    par.add(b);
}

@Override
public void actionPerformed(ActionEvent ev) {
    String act = ev.getActionCommand();
    res.setText(act);
    System.out.println(ev);
    res2.setText(res2.getText() + "" + act);
}

private class operAct implements ActionListener {
    private int opt;

    public operAct(int oper) {
        opt = oper;
    }

    public void actionPerformed(ActionEvent ev) {
        currentCalc = Integer.parseInt(res.getText());
        oper = opt;
        System.out.println(oper+" "+opt+" "+ currentCalc);
    }
}

}

1 个答案:

答案 0 :(得分:0)

我已经完成了你的代码;首先,我建议让事情变得更简单。

为简化起见,首先在字符串条目上使用getText(),然后将它们转换为整数。

对于两个Input TextFields,明确地将它们保存在各自数据类型的单独变量中,然后通过定义它们的方法执行您需要的任何操作。

您可以使用getAction命令,而不是每次都覆盖'动作执行的方法'。它将使您的代码更具可读性,并且您可以更轻松地发现错误。