提问:
计算器在计算完一次数据后,在textfield展示结果的时候,点击任意数字键会对上次计算结果产生编辑(比如上次计算结果为255,然后点击数字键3,结果上次的结果就变成了2553),请问如何解决?
全部代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator2 implements ActionListener{
JFrame frame;
JTextField textfield;
JPanel panel;
JButton[] numberButtons=new JButton[10];
JButton[] functionButtons=new JButton[8];
JButton addBn,subBn,mulBn,divBn;
JButton decBn,equBn,delBn,clrBn;
Font font=new Font(null,Font.BOLD,30);
double num1=0,num2=0,result=0;
char operator;
Calculator2(){
frame=new JFrame("Calculator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,500);
frame.getContentPane().setBackground(Color.black);
frame.setResizable(false);
frame.setLayout(null);
//TextField--
textfield=new JTextField();
textfield.setBounds(20,20,340,50);
textfield.setBorder(null);
textfield.setFont(font);
textfield.setForeground(Color.white);
textfield.setBackground(Color.gray);
textfield.setEditable(false);
//--TextField
//Buttons--
addBn=new JButton("+");
subBn=new JButton("-");
mulBn=new JButton("*");
divBn=new JButton("/");
decBn=new JButton(".");
equBn=new JButton("=");
delBn=new JButton("Del");
clrBn=new JButton("Clear");
functionButtons[0]=addBn;
functionButtons[1]=subBn;
functionButtons[2]=mulBn;
functionButtons[3]=divBn;
functionButtons[4]=decBn;
functionButtons[5]=equBn;
functionButtons[6]=delBn;
functionButtons[7]=clrBn;
for(int i=0;i<8;i++) {
functionButtons[i].addActionListener(this);
functionButtons[i].setFocusable(false);
functionButtons[i].setFont(font);
functionButtons[i].setForeground(Color.white);
functionButtons[i].setBackground(Color.black);
}
for(int i=0;i<10;i++) {
numberButtons[i]=new JButton(String.valueOf(i));
numberButtons[i].addActionListener(this);
numberButtons[i].setFocusable(false);
numberButtons[i].setFont(font);
numberButtons[i].setForeground(Color.white);
numberButtons[i].setBackground(Color.black);
}
delBn.setBounds(20,400,160,50);
clrBn.setBounds(200,400,160,50);
//--Buttons
//Buttons in Panel--
panel=new JPanel();
panel.setBackground(Color.black);
panel.setBounds(20,90,340,300);
panel.setLayout(new GridLayout(4,4,5,5));
panel.add(numberButtons[1]);
panel.add(numberButtons[2]);
panel.add(numberButtons[3]);
panel.add(addBn);
panel.add(numberButtons[4]);
panel.add(numberButtons[5]);
panel.add(numberButtons[6]);
panel.add(subBn);
panel.add(numberButtons[7]);
panel.add(numberButtons[8]);
panel.add(numberButtons[9]);
panel.add(mulBn);
panel.add(decBn);
panel.add(numberButtons[0]);
panel.add(equBn);
panel.add(divBn);
//--Buttons in Panel
frame.add(textfield);
frame.add(panel);
frame.add(delBn);
frame.add(clrBn);
frame.setVisible(true);
}
public static void main(String [] args) {
Calculator2 c1=new Calculator2();
}
@Override
public void actionPerformed(ActionEvent e) {
//TextField interactive--
for(int i=0;i<10;i++) {
if(e.getSource()==numberButtons[i]) {
textfield.setText(textfield.getText().concat(String.valueOf(i)));
}
}
if(e.getSource()==decBn) {
textfield.setText(textfield.getText().concat(String.valueOf(".")));
}
if(e.getSource()==addBn) {
num1=Double.parseDouble(textfield.getText());
operator='+';
textfield.setText("");
}
if(e.getSource()==subBn) {
num1=Double.parseDouble(textfield.getText());
operator='-';
textfield.setText("");
}
if(e.getSource()==mulBn) {
num1=Double.parseDouble(textfield.getText());
operator='*';
textfield.setText("");
}
if(e.getSource()==divBn) {
num1=Double.parseDouble(textfield.getText());
operator='/';
textfield.setText("");
}//--TextField interactive
//show result--
if(e.getSource()==equBn) {
num2=Double.parseDouble(textfield.getText());
switch(operator) {
case'+':
result=num1+num2;
break;
case'-':
result=num1-num2;
break;
case'*':
result=num1*num2;
break;
case'/':
result=num1/num2;
break;
}
textfield.setText(String.valueOf(result));
}//--show result
//set clear button--
if(e.getSource()==clrBn) {
textfield.setText("");
}//--set clear button
//set del button--
if(e.getSource()==delBn) {
String string=textfield.getText();
textfield.setText("");
for(int i=0;i<string.length()-1;i++) {
textfield.setText(textfield.getText()+string.charAt(i));
}
}
}
}
运行: