Calculator
来源:互联网 发布:液压系统计算软件 编辑:程序博客网 时间:2024/05/01 09:41
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Calcutor{
private Frame frame;
private Button backspaceButton,ceButton,cButton;
private Panel centerPanel,northPanel,southPanel;
private TextField tField;
private String[] name ={"MC", "7", "8", "9", "/", "sqrt", "MR", "4", "5",
"6", "*", "%", "MS", "1", "2", "3", "-", "1/x", "M+", "0", "+/-",
".", "+", "="};
private Button [ ] button = new Button[ name.length ];
private boolean isClickOper ,isClickDot; //是否点击小数点
private double d1 ,d2;
private int isSave;
private in operator;
public Calcutor(){
frame = new Frame("计算器");
northPanel = new Panel();
northPanel.setBounds(50 ,50, 280 ,80);
northPanel.setLayout(null);
southPanel = new Panel();
tField = new TextField("0", 30);
tField.setBounds(10,10,260,20);
northPanel.add(tField);
backspaceButton = new Button("BackSpace");
ceButton = new Button("CE");
cButton = new Button("C");
backspaceButton.setBounds(60,40,70,30);
ceButton.setBounds(130,40,70,30);
cButton.setBounds(200,40,70,30);
northPanel.add(backspaceButton);
northPanel.add(ceButton);
northPanel.add(cButton);
southPanel.setLayout(new GridLayout(4, 0, 5, 5));
MyActionListener mal = new MyActionListener();
backspaceButton.addActionListener(mal);
ceButton.addActionListener(mal);
cButton.addActionListener(mal);
for (int i = 0; i < name.length; i++) {
button[i] = new Button(name[i]);
button[i].addActionListener(mal);
southPanel.add(button[i]);
}
frame.add(northPanel, BorderLayout.NORTH);
frame.add(southPanel);
// frame.setSize(260, 245);
frame.pack();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent arg0) {
frame.dispose();
}
});
Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); // 获取屏幕分辨率
frame.setLocation(d.width / 2 - frame.getWidth() / 2, d.height / 2
- frame.getHeight() / 2); // 让frame居中显示在屏幕上
frame.setResizable(false); // 设置frame不能更改大小
frame.setVisible(true);
}
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
Button button = (Button) e.getSource();
String data = button.getLabel();
char chaData = data.charAt(0);
String text = tField.getText();
switch (chaData) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if(!isClickOper){ //此处判断是表示前一个数据是否输入结束
if (!text.equals("0")) {
data = text + data;
}
}else{ //否则表示是否开始输入后一个数据
isClickOper = !isClickOper;
if(isClickDot){ //输入第二个数据时,取消第二个数据的.的标示
isClickDot = !isClickDot;
}
}
tField.setText(data);
return;
case '.':
if (!isClickDot) { //此处判断是防止输入多个.
text = text + data; //将文本和按钮的.进行拼接
tField.setText(text);
isClickDot = !isClickDot; //表示已经输入.
}
return;
case '+':
count('+');
return;
case '-':
count('-');
return;
case '*':
count('*');
return;
case '/':
count('/');
return;
case '=':
count('=');
return;
}
// 将文本区域清0
if (data.equals("C") || data.equals("CE")) {
initData();
return;
}
// 将文本区域字符退格
if (data.equals("BackSpace")) {
if (!text.equals("0") && text.length() > 1) {
text = text.substring(0, text.length() - 1);
tField.setText(text);
} else if (text.length() == 1) {
initData();
}
return;
}
}
}
//将计算器相关逻辑数据进行初始化
public void initData(){
tField.setText("0");
if (isClickDot) { // 将是否含有.的布尔值设为初始值
isClickDot = !isClickDot;
}
if (isClickOper) { //将运算符标示也设为初始值
isClickOper = !isClickOper;
}
d1 = d2 = 0;
operator = '=';
isSave = 0;
}
public void count(char operator){
if(this.operator == '='){ //如果保存的前一次运算符是=号,就记住本次的运算符进行执行
this.operator = operator;
}
if (!isClickOper) { //是否点击运算符
isClickOper = !isClickOper;
if (isSave == 0) { //isSave值为0保存第d1个,值为1保存第d2个
d1 = Double.parseDouble(tField.getText());
isSave = 1;
} else {
d2 = Double.parseDouble(tField.getText());
switch(this.operator){ //执行前一次点击的运算符
case '+':
d1 = d1 + d2;
break;
case '-':
d1 = d1 - d2;
break;
case '*':
d1 = d1 * d2;
break;
case '/':
d1 = d1 / d2;
break;
}
tField.setText(String.valueOf(d1)); //在文本中显示结果
}
this.operator = operator; //记住点击的运算符
}
}
public static void main(String[] args) {
new Calculator();
}
}
- Calculator
- Calculator
- Calculator
- Calculator
- Calculator
- Calculator
- calculator
- Calculator
- Calculator
- calculator
- Calculator
- Calculator
- Calculator| ||
- Calculator
- Calculator
- Calculator
- MarkSix calculator
- hdu3546 Calculator
- 列类型和表类型
- 什么叫程序库什么是lib,什么是dll,什么是.a,什么是.so,什么是静态库,什么是动态库
- 记录表类型
- 复合类型
- 游标
- Calculator
- 泄露你的JavaScript技术很烂的五个表现
- 存储过程
- 什么是spring框架?
- Spring 的IOC(一)
- 4-19
- 不想写啊
- C语言:链表
- IT的历史经验值得记取