如何在MVC计算器java上显示数字?

如何在MVC计算器java上显示数字?,java,swing,jlabel,calculator,Java,Swing,Jlabel,Calculator,我试图让它像普通计算器一样,在计算器上显示数字的JLabel。但我不知道如何做到这一点,我所能做的就是让它成为一个不变的标签。我将数字字符串放在那里,但它不会像单击数字后那样改变。有什么建议吗 /* * calc view class */ import javax.swing.*; import java.awt.*; import java.awt.event.*; class Calc extends JFrame implements ActionListener {

我试图让它像普通计算器一样,在计算器上显示数字的JLabel。但我不知道如何做到这一点,我所能做的就是让它成为一个不变的标签。我将数字字符串放在那里,但它不会像单击数字后那样改变。有什么建议吗

/* 
 * calc view class
 */



import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


class Calc extends JFrame implements ActionListener {



    private JButton plusButton = new JButton("+");
    private JButton minusButton = new JButton("-");
    private JButton clearButton = new JButton("Clear");
    private JButton equalsButton = new JButton("=");
    private JButton zeroButton = new JButton("0");
    private JButton oneButton = new JButton("1");
    private JButton twoButton = new JButton("2");
    private JButton threeButton = new JButton("3");
    private JButton fourButton = new JButton("4");
    private JButton fiveButton = new JButton("5");
    private JButton sixButton = new JButton("6");
    private JButton sevenButton = new JButton("7");
    private JButton eightButton = new JButton("8");
    private JButton nineButton = new JButton("9");
    private String number = "";
    private JLabel numDisplay = new JLabel(number);
    private boolean addition = false;
    private boolean subtraction = false;


    private int total = 0;
    private boolean isEquals = false;   // false = haven't clicked equals button yet, true they have
    //private String numberText;

    Calc(){
        JPanel calcPanel = new JPanel();

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(400, 600);
        calcPanel.add(numDisplay);
        calcPanel.add(plusButton);
        calcPanel.add(minusButton);
        calcPanel.add(clearButton);
        calcPanel.add(equalsButton);
        calcPanel.add(zeroButton);
        calcPanel.add(oneButton);
        calcPanel.add(twoButton);
        calcPanel.add(threeButton);
        calcPanel.add(fourButton);
        calcPanel.add(fiveButton);
        calcPanel.add(sixButton);
        calcPanel.add(sevenButton);
        calcPanel.add(eightButton);
        calcPanel.add(nineButton);

        this.add(calcPanel);

        plusButton.addActionListener(this);
        minusButton.addActionListener(this);
        clearButton.addActionListener(this);
        equalsButton.addActionListener(this);
        zeroButton.addActionListener(this);
        oneButton.addActionListener(this);
        twoButton.addActionListener(this);
        threeButton.addActionListener(this);
        fourButton.addActionListener(this);
        fiveButton.addActionListener(this);
        sixButton.addActionListener(this);
        sevenButton.addActionListener(this);
        eightButton.addActionListener(this);
        nineButton.addActionListener(this);




    }
    public void actionPerformed(ActionEvent event){
        if (event.getSource() instanceof JButton){
            JButton clickedButton = (JButton) event.getSource();
            String buttonText = clickedButton.getText();
            if (clickedButton == zeroButton || clickedButton == oneButton || clickedButton == twoButton || clickedButton == threeButton || clickedButton == fourButton || clickedButton == fiveButton || clickedButton == sixButton || clickedButton == sevenButton || clickedButton == eightButton || clickedButton == nineButton)
            {
                number = number + buttonText;
            }
            if (clickedButton == clearButton){
                number = "";
                addition = false;
                subtraction = false;
                total = 0;
            }
            if (clickedButton == plusButton){
                addition = true;
                subtraction = false;
                total = Integer.parseInt(number);

            }
            if (clickedButton == minusButton){
                addition = false;
                subtraction = true;
                total = Integer.parseInt(number);

                //number = "";
            }
            if (clickedButton == equalsButton){
                isEquals = true;
                addition = false;
                subtraction = false;
            }
        }
    }

    public int getNumber(){
        return Integer.parseInt(number);
    }
    public boolean addition(){
        return addition;
    }
    public boolean subtraction(){
        return subtraction;
    }
    public int total(){
        return total;
    }
    public boolean isEquals(){
        return isEquals;
    }
    public String getNumberString(){
        return number;
    }
}
这行代码所做的只是初始化numDisplay变量以包含变量号的文本。这并不意味着每次更改数字变量时标签都会自动更新。我没有仔细查看您的代码,但您可以尝试:

number = number + buttonText;
numDisplay.setText(number);

我认为您缺少的是在actionPerformed方法的末尾调用numDisplay.setText(number)。
您应该在需要更改文本时调用此方法。

好的,谢谢,我这样做了,但在我按下+或-按钮后,它不会被清除,所以它只是不断地添加到数字字符串中。关于如何在不过早擦除数字的情况下执行此操作,您有什么想法吗?在检测到+或-按钮单击时,您应该首先将显示存储在整数变量中,例如int number1=integer.parseInt(numDisplay.getText()),清除标签(numDisplay.setText(“”;)然后在equals上单击根据上一个操作的不同执行加法或减法se:numDisplay.setText(number1+Integer.parseInt(numDisplay.getText());
number = number + buttonText;
numDisplay.setText(number);