Java计算器-在按下操作之前让数字留在屏幕上

Java计算器-在按下操作之前让数字留在屏幕上,java,swing,calculator,Java,Swing,Calculator,我的计算器有问题;一切正常。但是,当输入操作员时,我需要之前输入的号码和操作员保持在屏幕上。 我还需要一种方法来修复在输入运算符后按equals时出现的错误。 任何帮助都将不胜感激。谢谢 import java.awt.*; import javax.swing.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.*; import javax.sw

我的计算器有问题;一切正常。但是,当输入操作员时,我需要之前输入的号码和操作员保持在屏幕上。 我还需要一种方法来修复在输入运算符后按equals时出现的错误。
任何帮助都将不胜感激。谢谢

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.*;
import javax.swing.JLabel;


public class Chelculator extends JPanel{

  //creates buttons
  private JTextField screen; //creates the screen
  private JButton delete, clear; //creates clear and delete buttons
  private JButton zero, one, two, three, four, five, six, seven, eight, nine; //creates number buttons
  private JButton plus, minus, square, divide, multiply, squareroot, point, equals; //creates operation buttons
  private JButton mclear, mplus, mminus, mrecall; //creates memory buttons
  double Mem; 
  double Subtract;

  double number1, number2, result;
  char choice;
  static String lastCommand = null;

  public Chelculator(){
    JPanel buttons = new JPanel();
    buttons.setBackground(Color.pink); //changes background to pink
    plus = new JButton("+"); 
    minus = new JButton("-");
    square = new JButton("^");
    clear = new JButton("CE");
    divide = new JButton("÷");
    multiply = new JButton("x");
    squareroot = new JButton("√");
    delete = new JButton("DE");
    mclear = new JButton("MC");
    mplus = new JButton("M+");
    mminus = new JButton("M-");
    mrecall = new JButton("MR");
    one = new JButton("1");
    two = new JButton("2");
    three = new JButton("3");
    four = new JButton("4");
    five = new JButton("5");
    six = new JButton("6");
    seven = new JButton("7");
    eight = new JButton("8");
    nine = new JButton("9");
    zero = new JButton("0");
    equals = new JButton("=");
    point = new JButton(".");


    buttons.setLayout(new GridLayout(6,4)); //creates a grid for buttons

    //adds buttons into calculator
    buttons.add(mclear);
    buttons.add(mrecall);
    buttons.add(mplus);
    buttons.add(mminus);
    buttons.add(clear);
    clear.setForeground(Color.red);
    buttons.add(delete);
    buttons.add(square);
    buttons.add(squareroot);
    buttons.add(plus);
    buttons.add(minus);
    buttons.add(divide);
    buttons.add(multiply);
    buttons.add(seven);
    buttons.add(eight);
    buttons.add(nine);
    buttons.add(zero);
    buttons.add(four);
    buttons.add(five);
    buttons.add(six);
    buttons.add(point);
    buttons.add(one);
    buttons.add(two);
    buttons.add(three);
    buttons.add(equals);

    EventListener Listener = new EventListener();
    plus.addActionListener(Listener); 
    minus.addActionListener(Listener); 
    square.addActionListener(Listener); 
    clear.addActionListener(Listener); 
    divide.addActionListener(Listener); 
    multiply.addActionListener(Listener); 
    squareroot.addActionListener(Listener); 
    delete.addActionListener(Listener); 
    mclear.addActionListener(Listener); 
    mplus.addActionListener(Listener); 
    mminus.addActionListener(Listener); 
    mrecall.addActionListener(Listener); 
    one.addActionListener(Listener);
    two.addActionListener(Listener);
    three.addActionListener(Listener);
    four.addActionListener(Listener);
    five.addActionListener(Listener);
    six.addActionListener(Listener); 
    seven.addActionListener(Listener);
    eight.addActionListener(Listener); 
    nine.addActionListener(Listener); 
    zero.addActionListener(Listener); 
    equals.addActionListener(Listener); 
    point.addActionListener(Listener);  

    setPreferredSize(new Dimension(270,280));
    screen = new JTextField();
    screen.setEditable(false);
    JPanel screens = new JPanel();
    screens.setLayout(new BorderLayout());
    screens.setBackground(Color.pink);
    screens.setPreferredSize(new Dimension(270,40)); //creates a panel and puts screen in it. This allows the size of the screen to be changed.
    screens.add(screen);
    setLayout(new BorderLayout()); 
    add(screens, BorderLayout.NORTH); 
    add(buttons, BorderLayout.CENTER); 
  }

  private class EventListener implements ActionListener{ 

    public void actionPerformed(ActionEvent e){
  String input = e.getActionCommand();
      if(Character.isDigit(input.charAt(0))){ 
        screen.setText(screen.getText() + input); 
      }    

      if(e.getSource() == equals){
        equal();
      }


      if(e.getSource() == plus){
        number1 = Double.parseDouble(screen.getText());
        screen.setText("");
        choice = '+';
      }  
      if(e.getSource() == minus){
        number1 = Double.parseDouble(screen.getText());
        screen.setText("");
        choice = '-';
      }
      if(e.getSource() == square){
        screen.setText("^");
      }
      if(e.getSource() == squareroot){
        screen.setText("√");
      }
      if(e.getSource() == divide){
        number1 = Double.parseDouble(screen.getText());
        screen.setText("");
        choice = '/';
      }

      if(e.getSource() == multiply){
        number1 = Double.parseDouble(screen.getText());
        screen.setText("");
        choice = 'x';
      }

      if(e.getSource() == clear){
        screen.setText(null);
        number1 = 0;
        number2 = 0;
      }

      if(e.getSource() == delete){ 
       screen.getText().substring(0, (screen.getText().length() - 1));  
      }

      if(e.getSource() == point){
        screen.setText(screen.getText() + "."); 
      }


      //MEMORY
      if(e.getSource() == mplus){
        Mem = Mem + Double.parseDouble(screen.getText());
    }

      if(e.getSource() == mrecall){
        screen.setText(Double.toString(Mem));
      }

      if(e.getSource() == mminus){
        Subtract = Double.parseDouble(screen.getText());
        Mem = Mem - Subtract;
  }

    if(e.getSource() == mclear){
      Mem = 0;
    }
    }

  public void equal(){
    number2 = Double.parseDouble(screen.getText());
    if (choice == '+'){
      result = number1 + number2;
      number1 = 0;
      number2 = 0;

    }
    if (choice == '-'){
      result = number1 - number2;
      number1 = 0;
      number2 = 0;
    }
    if (choice == '/'){
      result = number1 / number2;
      number1 = 0;
      number2 = 0;
    }
    if (choice == '*'){
      result = number1 * number2;
      number1 = 0;
      number2 = 0;
    }

    screen.setText(Double.toString(result));
  }

  private void assign(String no){
    if(screen.getText().equals("0"))
      screen.setText(no);
    else if(lastCommand == "="){
      screen.setText(no);
      lastCommand = null;
    }
    else
      screen.setText(screen.getText()+no);
  }
}
}

屏幕正在擦除文本,因为您正在擦除它

if(e.getSource() == plus){
    number1 = Double.parseDouble(screen.getText());
    screen.setText("");
    choice = '+';
} 
请注意
屏幕。setText(“”)


此外,将输入的数字存储为
字符串
,然后每次需要将其作为数字访问时都必须运行
Double.parseDouble()
,这是非常低效的,也是一种糟糕的做法。保留一个
double
字段,并使用该字段存储值,这样您就不必调用
parseDouble()

,在来到这里之前,您需要进行一些调试,首先隔离错误,然后与我们共享此信息。调试器或println语句可以帮助您完成此操作。否则,你所做的一切就是丢弃你的代码,说“请修复这个”。完全同意关于修复我态度的评论。:)它是这样的,因为这是它运行的唯一方式。当我把任何东西放进去的时候,它会因为某种原因崩溃。