import org.eclipse.swt.*;
import java.lang.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
public class calculator {
Display d;
Shell s;
String num="0";
double result=0,temp=0;
int op=0,pan=1,dotpan=0;
calculator() {
Display d=new Display();
Shell s= new Shell(d);
s.setText("陈实的计算器");
s.setSize(400,500);
final Text text1 = new Text(s,SWT.SINGLE|SWT.BORDER);
text1.setBounds(15,15,360,40);
text1.setEditable(false);
// text1.setBackground(white);
text1.setText(num);
s.open();
//0
final Button b0 = new Button(s,SWT.PUSH);
b0.setBounds(20,400,70,50);
b0.setText("0");
b0.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==0)
{
text1.setText(num="0");
pan=1;
}
else
{
if(Double.parseDouble(text1.getText())!=0||dotpan==1)
text1.setText(text1.getText()+0);
}
num=text1.getText();
}
});
//1
final Button b1 = new Button(s,SWT.PUSH);
b1.setBounds(20,340,70,50);
b1.setText("1");
b1.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==0)
{
num="";
text1.setText(num+1);
pan=1;
}
else
{
if(Double.parseDouble(text1.getText())==0&&dotpan!=1)
{
text1.setText(num="");
text1.setText(text1.getText()+1);
}
else
text1.setText(text1.getText()+1);
}
num=text1.getText();
}
});
//2
final Button b2 = new Button(s,SWT.PUSH);
b2.setBounds(100,340,70,50);
b2.setText("2");
b2.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==0)
{
num="";
text1.setText(num+2);
pan=1;
}
else
{
if(Double.parseDouble(text1.getText())==0&&dotpan!=1)
{
text1.setText(num="");
text1.setText(text1.getText()+2);
}
else
text1.setText(text1.getText()+2);
}
num=text1.getText();
}
});
//3
final Button b3 = new Button(s,SWT.PUSH);
b3.setBounds(180,340,70,50);
b3.setText("3");
b3.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==0)
{
num="";
text1.setText(num+3);
pan=1;
}
else
{
if(Double.parseDouble(text1.getText())==0&&dotpan!=1)
{
text1.setText(num="");
text1.setText(text1.getText()+3);
}
else
text1.setText(text1.getText()+3);
}
num=text1.getText();
}
});
//4
final Button b4 = new Button(s,SWT.PUSH);
b4.setBounds(20,280,70,50);
b4.setText("4");
b4.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==0)
{
num="";
text1.setText(num+4);
pan=1;
}
else
{
if(Double.parseDouble(text1.getText())==0&&dotpan!=1)
{
text1.setText(num="");
text1.setText(text1.getText()+4);
}
else
text1.setText(text1.getText()+4);
}
num=text1.getText();
}
});
//5
final Button b5 = new Button(s,SWT.PUSH);
b5.setBounds(100,280,70,50);
b5.setText("5");
b5.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==0)
{
num="";
text1.setText(num+5);
pan=1;
}
else
{
if(Double.parseDouble(text1.getText())==0&&dotpan!=1)
{
text1.setText(num="");
text1.setText(text1.getText()+5);
}
else
text1.setText(text1.getText()+5);
}
num=text1.getText();
}
});
//6
final Button b6 = new Button(s,SWT.PUSH);
b6.setBounds(180,280,70,50);
b6.setText("6");
b6.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==0)
{
num="";
text1.setText(num+6);
pan=1;
}
else
{
if(Double.parseDouble(text1.getText())==0&&dotpan!=1)
{
text1.setText(num="");
text1.setText(text1.getText()+6);
}
else
text1.setText(text1.getText()+6);
}
num=text1.getText();
}
});
//7
final Button b7 = new Button(s,SWT.PUSH);
b7.setBounds(20,220,70,50);
b7.setText("7");
b7.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==0)
{
num="";
text1.setText(num+7);
pan=1;
}
else
{
if(Double.parseDouble(text1.getText())==0&&dotpan!=1)
{
text1.setText(num="");
text1.setText(text1.getText()+7);
}
else
text1.setText(text1.getText()+7);
}
num=text1.getText();
}
});
//8
final Button b8 = new Button(s,SWT.PUSH);
b8.setBounds(100,220,70,50);
b8.setText("8");
b8.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==0)
{
num="";
text1.setText(num+8);
pan=1;
}
else
{
if(Double.parseDouble(text1.getText())==0&&dotpan!=1)
{
text1.setText(num="");
text1.setText(text1.getText()+8);
}
else
text1.setText(text1.getText()+8);
}
num=text1.getText();
}
});
//9
final Button b9 = new Button(s,SWT.PUSH);
b9.setBounds(180,220,70,50);
b9.setText("9");
b9.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==0)
{
num="";
text1.setText(num+9);
pan=1;
}
else
{
if(Double.parseDouble(text1.getText())==0&&dotpan!=1)
{
text1.setText(num="");
text1.setText(text1.getText()+9);
}
else
text1.setText(text1.getText()+9);
}
num=text1.getText();
}
});
//dot
final Button b10 = new Button(s,SWT.PUSH);
b10.setBounds(100,400,70,50);
b10.setText(".");
b10.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(dotpan==0)
{
if(pan==0)
{
text1.setText(num="0.");
pan=1;
}
else
{
if(Double.parseDouble(text1.getText())==0)
{
text1.setText(num="0.");
}
else
text1.setText(text1.getText()+".");
}
num=text1.getText();
dotpan=1;
}
}
});
//+
final Button badd = new Button(s,SWT.PUSH);
badd.setBounds(260,340,70,50);
badd.setText("+");
badd.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==1&&result==0)
{
result=Double.parseDouble(num);
op=1;
dotpan=0;
pan=0;
}
else if(result!=0&&pan==1)
{
temp=Double.parseDouble(num);
result=result+temp;
text1.setText(num=String.valueOf(result));
temp=0;
pan=0;
}
else if(pan==0)
{
result=Double.parseDouble(num);
temp=0;
dotpan=0;
op=1;
}
}
});
//-
final Button bmin = new Button(s,SWT.PUSH);
bmin.setBounds(260,400,70,50);
bmin.setText("-");
bmin.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==1&&result==0)
{
result=Double.parseDouble(num);
op=2;
dotpan=0;
pan=0;
}
else if(result!=0&&pan==1)
{
temp=Double.parseDouble(num);
result=result-temp;
text1.setText(num=String.valueOf(result));
temp=0;
dotpan=0;
pan=0;
}
else if(pan==0)
{
result=Double.parseDouble(num);
temp=0;
dotpan=0;
op=2;
}
}
});
//*
final Button bmul = new Button(s,SWT.PUSH);
bmul.setBounds(260,280,70,50);
bmul.setText("*");
bmul.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==1&&result==0)
{
result=Double.parseDouble(num);
op=3;
dotpan=0;
pan=0;
}
else if(result!=0&&pan==1)
{
temp=Double.parseDouble(num);
result=result*temp;
text1.setText(num=String.valueOf(result));
temp=0;
dotpan=0;
pan=0;
}
else if(pan==0)
{
result=Double.parseDouble(num);
temp=0;
dotpan=0;
op=3;
}
}
});
///
final Button bdiv = new Button(s,SWT.PUSH);
bdiv.setBounds(260,220,70,50);
bdiv.setText("/");
bdiv.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(pan==1&&result==0)
{
result=Double.parseDouble(num);
op=4;
dotpan=0;
pan=0;
}
else if(result!=0&&pan==1)
{
temp=Double.parseDouble(num);
if(temp!=0)
{
result=result/temp;
text1.setText(num=String.valueOf(result));
temp=0;
dotpan=0;
pan=0;
}
}
else if(pan==0)
{
result=Double.parseDouble(num);
temp=0;
dotpan=0;
op=4;
}
}
});
//=
final Button bequal = new Button(s,SWT.PUSH);
bequal.setBounds(180,400,70,50);
bequal.setText("=");
bequal.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(op==1)
{
temp=Double.parseDouble(num);
result=result+temp;
temp=0;
op=0;
num=String.valueOf(result);
text1.setText(num);
}
if(op==2)
{
temp=Double.parseDouble(num);
result=result-temp;
temp=0;
op=0;
text1.setText(num=String.valueOf(result));
}
if(op==3)
{
temp=Double.parseDouble(num);
result=result*temp;
temp=0;
op=0;
text1.setText(num=String.valueOf(result));
}
if(op==4)
{
temp=Double.parseDouble(num);
if(temp!=0)
{
result=result/temp;
temp=0;
op=0;
text1.setText(num=String.valueOf(result));
}
}
pan=0;
}
});
//C
final Button bcl = new Button(s,SWT.PUSH);
bcl.setBounds(260,160,70,50);
bcl.setText("C");
bcl.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
result=0;
pan=1;
temp=0;
op=0;
dotpan=0;
text1.setText(num="0");
}
});
while(!s.isDisposed()){
if(!d.readAndDispatch())
d.sleep();
}
d.dispose();
}
public static void main(String[] args){
calculator ss= new calculator();
}
}
很抱歉这么长时间才交上来,一直没有什么时间做,而且没有比较好的SWT学习资料,感谢俞诗尧的书,让我一晚上加上一个上午就可以搞定这个任务。
功能实现的话连续运算可以实现也可以按下等号之后继续算,到目前为止这方面都还没有出现bug(当然我的测试时间比较匆忙就是了)。
不足:
1)布局不怎么好看,因为时间太赶所以只管实现功能的事情,连背景颜色都没有改成白色,囧java的color类让我无奈,所以界面不怎么好看。
2)再就是目前已知的一个bug就是在进行连续运算的时候选择运算操作后不能改变注意,就是如果你点击了+键,你就不能改变主意做其他的运算了,就算你点击了其他运算,得出的结果依旧是+得出的结果……
3)我答应浩哥的M+,M-,MC,MR没做,时间实在太紧了抱歉啊,以后有时间我会补起来的~
4)强烈要求大家来找bug……分析一下原因
虽然界面不好看,还是附张图吧……额……,谁能教我怎么贴图?…………算了,群邮件里面看吧。