/** 实验3 import java.awt.*; public class Calculator0ok extends JFrame panel1.setLayout(gridLayout1); panel3.setLayout(new GridLayout(1,5,6,9)); frame.pack(); }
* @(#)Calculator.java
* 计算器程序,实现加减乘除等数学简单运算。
*
* @ljuan
* @version 1.00 2009/11/13
*/
import javax.swing.*;
import java.awt.event.*;
import javax.swing.border.*;
import java.math.*;
implements ActionListener{
private JFrame frame = new JFrame("Calculator");
private JPanel panel1=new JPanel();
private JPanel panel2=new JPanel();
private JPanel panel3=new JPanel();
private GridLayout gridLayout1 = new GridLayout();
private GridLayout gridLayout2 = new GridLayout(4,6,6,6);
private JTextField tf =new JTextField();;
private String recentOperation = null;
private String recentNum = null;
private boolean isNew = true;
public void addButton(Container c,String s){
JButton b= new JButton(s);
c.add(b);
b.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
String s=e.getActionCommand();
if(s.charAt(0)>='0' && s.charAt(0)<='9'){
if(!isNew)
tf.setText(tf.getText()+s);
else tf.setText(s);
isNew=false;
if(tf.getText().equals("0")) isNew=true; //如果是0则显示不变
}
else if(s.equals(".")){
if(tf.getText().indexOf(".") != -1) return;
if(!isNew && tf.getText() != "")
tf.setText(tf.getText()+".");
else
tf.setText("0.");
isNew = false;
}
else if (s.equals("sqrt")){
double last=Double.parseDouble(tf.getText());
last =Math.sqrt(last);
tf.setText(""+last);
isNew = true;
}
else if (s.equals("Backspase")){
if(!isNew){
if (tf.getText().length()==1) {
tf.setText("0");
isNew = true;
}
else tf.setText(tf.getText().substring(0,tf.getText().length()-1));
}
}
else if (s.equals("CE")||s.equals("C")){
tf.setText("0");
recentOperation = null;
isNew = true;
}
else if (s.equals("l/x")){ //用L的小写l代替1,避免与“1”有冲突而成为1/x使程序错误
if(tf.getText().equals("0")||tf.getText().equals("0.")){
tf.setText("ERROR");
isNew = true;
}
else{
double last=Double.parseDouble(tf.getText());
last = 1/last;
tf.setText(""+(last));
}
isNew = true; }
else if(s.equals("+/-")){
if(tf.getText().charAt(0)!='-')tf.setText("-"+tf.getText());
else tf.setText(tf.getText().substring(1)); //将前面的符号去除
}
else if (s.equals("=")){
equalaction(e);
}
else{
if(tf.getText().equals("")) return;
if(recentOperation != null) equalaction(e);
recentOperation = s;
recentNum = tf.getText();
isNew = true;
}
}
void equalaction(ActionEvent e){
if(recentOperation == null || recentNum == null||tf.getText().equals(""))
return;
double last =0, now=0;
try{
last=Double.parseDouble(recentNum);
now=Double.parseDouble(tf.getText());
} catch(NumberFormatException ne){
recentOperation = null;
recentNum = null;
tf.setText("数据输入不合法");
System.out.println("数据输入不合法!");
isNew=true;
return;
}
if(recentOperation.equals("+")){
last+= now;
}
if(recentOperation.equals("-")){
last-= now;
}
if(recentOperation.equals("*")){
last*= now;
}
if(recentOperation.equals("/")){
last/= now;
}
if(recentOperation.equals("%")){
last%= now;
}
tf.setText(""+last);
recentNum =tf.getText();
recentOperation=null;
isNew=true;
}
void go(){
tf.setBorder(BorderFactory.createLoweredBevelBorder());
tf.setDisabledTextColor(Color.white);
tf.setEditable(false);
tf.setText("0");
tf.setHorizontalAlignment(SwingConstants.RIGHT);
panel1.setPreferredSize(new Dimension(333,30));
panel1.add(tf,new GridBagConstraints(1,0,0,0,0.0,0.0,
GridBagConstraints.NORTH,GridBagConstraints.HORIZONTAL,
new Insets(0,1,0,0),155,0));
panel3.add(Box.createRigidArea(new Dimension(30,9)));
addButton(panel3,"Backspase");
addButton(panel3,"CE");
addButton(panel3,"C");
panel2.setLayout(gridLayout2);
panel2.add(new JButton("MC"));
addButton(panel2,"7");
addButton(panel2,"8");
addButton(panel2,"9");
addButton(panel2,"/");
addButton(panel2,"sqrt");
panel2.add(new JButton("MR"));
addButton(panel2,"4");
addButton(panel2,"5");
addButton(panel2,"6");
addButton(panel2,"*");
addButton(panel2,"%");
panel2.add(new JButton("MS"));
addButton(panel2,"1");
addButton(panel2,"2");
addButton(panel2,"3");
addButton(panel2,"-");
addButton(panel2,"l/x");
panel2.add(new JButton("M+"));
addButton(panel2,"0");
addButton(panel2,"+/-");
addButton(panel2,".");
addButton(panel2,"+");
addButton(panel2,"=");
Container contentPane = frame.getContentPane();
contentPane.add(panel1,BorderLayout.NORTH);
contentPane.add(panel2,BorderLayout.SOUTH);
contentPane.add(panel3,BorderLayout.CENTER);
frame.setVisible(true);
frame.setResizable(false);
frame.addWindowListener(new java.awt.event.WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public static void main(String[] args){
Calculator0ok that = new Calculator0ok();
that.go();
}
java的实验:利用java实现设计计算器的加减乘除功能。