package my;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; 
public class Calculator 
...{
public static void main(String[] args) 
...{
CalculatorFrame frame=new CalculatorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
} 
class CalculatorFrame extends JFrame 
...{
public CalculatorFrame() 
...{
setTitle("Calculator");
CalculatorPanel panel=new CalculatorPanel();
add(panel);
pack();
}
} 
class CalculatorPanel extends Panel 
...{
public CalculatorPanel() 
...{
setLayout(new BorderLayout()); 
result=0;
lastCommand="=";
start=true;
flag=true; 
display=new JButton("0");
display.setEnabled(false);
add(display,BorderLayout.NORTH); 
ActionListener insert=new InsertAction();
ActionListener command=new CommandAction(); 
panel=new JPanel();
panel.setLayout(new GridLayout(4,5)); 
addButton("7",insert);
addButton("8",insert);
addButton("9",insert);
addButton("/",command);
addButton("CE",command); 
addButton("4",insert);
addButton("5",insert);
addButton("6",insert);
addButton("*",command);
addButton("Backspace",command); 
addButton("1",insert);
addButton("2",insert);
addButton("3",insert);
addButton("-",command);
addButton("sqrt",command); 
addButton("0",insert);
addButton(".",insert);
addButton("=",command);
addButton("+",command);
addButton("1/x",command); 
add(panel,BorderLayout.CENTER);
}
private void addButton(String label,ActionListener listener) 
...{
JButton button=new JButton(label);
button.addActionListener(listener);
panel.add(button);
}
private class InsertAction implements ActionListener 
...{
public void actionPerformed(ActionEvent event) 
...{
String input=event.getActionCommand();
if(start&&flag) 
...{
display.setText("");
start=false;
}
if(flag)
display.setText(display.getText()+input);
}
}
private class CommandAction implements ActionListener 
...{
public void actionPerformed(ActionEvent event) 
...{
String command=event.getActionCommand(); 
if(command.equals("CE")) 
...{
display.setText("0");
start=true;
flag=true;
command="=";
}
else
if(start&&flag) 
...{
if(command.equals("-")) 
...{
display.setText(command);
start=false;
}
else
if((command.equals("1/x")||command.equals("sqrt"))&&flag)
calculate(Double.parseDouble(display.getText()),command);
else
if(flag)
lastCommand=command;
}
else 
...{
if(command.equals("Backspace")&&flag) 
...{
String s=display.getText();
char[] s1=s.toCharArray();
if(s.length()>=2) 
...{
String s2=new String(s1,0,s.length()-1);
display.setText(s2);
}
else 
...{
display.setText("0");
start=true;
} 
}
else if(flag) 
...{
calculate(Double.parseDouble(display.getText()),command); 
lastCommand=command;
start=true;
}
}
}
} 
public void calculate(double x,String command) 
...{
if(lastCommand.equals("+")) result+=x;
else if(lastCommand.equals("-")) result-=x;
else if(lastCommand.equals("/")) 
...{
if(x!=0)
result/=x;
else 
...{
display.setText("除数不能为0");
start=false;
flag=false;
return;
}
}
else if(lastCommand.equals("*")) result*=x;
else if(command.equals("1/x")) 
...{
if(x!=0)
result=1/x;
else 
...{
display.setText("除数不能为0");
start=false;
flag=false;
return;
} 
}
else if(command.equals("sqrt")) 
...{
if(x>=0)
result=Math.sqrt(x);
else 
...{
display.setText("函数输入无效");
start=false;
flag=false;
return;
}
}
else if(lastCommand.equals("=")) result=x; 
display.setText(""+result);
}
private JButton display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;
private boolean flag;
}
3891

被折叠的 条评论
为什么被折叠?



