import javax.swing.*;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener
{
private JTextField text;
StringBuffer sb1 = new StringBuffer(); //參數壹
StringBuffer sb2 = new StringBuffer(); //參數二
private double b;
private double d = 0.0f;
private static int j = 0;
private static char f;
private static boolean D = false;
private final String[] KEYS = {"sqrt","+/-","CE","C", "7", "8", "9", "/",
"4", "5", "6","*", "1", "2", "3","-", "0",".", "=", "+" };
private JButton keys[] = new JButton[KEYS.length];
//構造函數
public Calculator()
{
//設置JFrame
super("Calculator");
this.setBounds(480, 320, 240, 220);
this.setResizable(false);
this.setBackground(Color.lightGray);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.getContentPane().setLayout(new FlowLayout());//內容窗格流布局
//文本行
text = new JTextField("0.", 20);
text.setHorizontalAlignment(JTextField.RIGHT);
this.getContentPane().add(text);
text.addActionListener(this);
//面板
JPanel panel = new JPanel(new GridLayout(6, 4));
this.getContentPane().add(panel);
//定義按鈕
for(int i=0;i<KEYS.length;i++)
{
keys[i] = new JButton( KEYS[i]);//定義按鈕
panel.add(keys[i]); //添加組件
keys[i].addActionListener(this);//註冊事件監聽器
}
this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
JButton jb = (JButton)e.getSource();
char c = jb.getText().charAt(0);//給第壹個數賦值
switch (c)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
SetNum(c);
break;
//運算符號
case '+':
case '-':
case '*':
case '/':
setOperation(c);
break;
//運算結果或歸零
case '=':
Answers(f);
break;
case 'C':
restart();
}
}
//輸入數據函數
private void SetNum(char y)
{
if (D == false)
{
sb1.append(y);
this.text.setText(sb1.toString());
}
else
{
sb2.append(y);
this.text.setText(sb2.toString());
}
}
//輸入運算符
private void setOperation(char a)
{
f = a;
D = true;
this.text.setText("");
}
//輸出答案函數
public void Answers(char k)
{
if (sb2.length() == 0)
{
this.text.setText(java.lang.String.valueOf(Double.parseDouble(sb1.toString())));
}
else
{
if (j == 0)
{
d = Double.parseDouble(sb1.toString());
}
b = Double.parseDouble(sb2.toString());
j = 1;
D = false;
sb1.delete(0, sb1.length() - 1);//刪除字符串從0~a-1處(這個方法就是這麽用地)
sb2 = new StringBuffer("");//重新新建壹個對象覆蓋
//sb2.delete(0,sb2.length()-1);//刪除字符串從0~a-1處(這個方法就是這麽用地)
switch (k)
{
case '+':
d = d + b;
this.text.setText(java.lang.String.valueOf(d));
break;
case '-':
d = d - b;
this.text.setText(java.lang.String.valueOf(d));
break;
case '*':
d = d * b;
this.text.setText(java.lang.String.valueOf(d));//在文本行輸出數字string.valueof(c)
break;
case '/':
if (b == 0)
{
restart();
}
d = d / b;
this.text.setText(java.lang.String.valueOf(d));
break;
}
}
}
//}
//歸零函數
private void restart()
{
Calculator.this.dispose();
j = 0;
d = 0;
D = false;
new Calculator();
}
public static void main(String[] args)
{
new Calculator();
}
}
很久以前寫的,剛剛找出來妳試試吧