|
10.4 开发实例
//点击此处请看效果
//calculator.java
import java.lang.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class calculator extends Applet
{
TextField text = new TextField();
Label label=new Label("Calculator" ;
public Button buttons[]=new Button[15];
//初始化
public void init()
{
setBackground(Color.gray);
GridBagLayout gridbag = new GridBagLayout();
setLayout(gridbag);
for(int i=0;i<10;i++)
{
buttons=new Button(""+i+"" ;
}
buttons[10] = new Button("-" ;
buttons[11] = new Button("*" ;
buttons[12] = new Button("CLR" ;
buttons[13] = new Button("+" ;
buttons[14] = new Button("=" ;
int px[] = {0,0,4,7,0,4,7,0,4,7,0,4,7,0,4,7,0};
int py[] = {0,3,3,3,5,5,5,7,7,7,9,9,9,11,11,11,2};
int pwidth[]={10,4,3,3,4,3,3,4,3,3,4,3,3,4,3,3,10};
int pheight[] = {2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
GridBagConstraints cons[] = new GridBagConstraints[17];
for(int i=0;i<17;i++)
{
cons = new GridBagConstraints();
cons.fill = new GridBagConstraints().BOTH;
cons.gridx = px;
cons.gridwidth=pwidth;
cons.gridheight = pheight;
if(i==0)
{
gridbag.setConstraints(text,cons[0]);
add(text);
}
else if(i==16)
{
gridbag.setConstraints(label,cons[16]);
add(label);
}
else
{
gridbag.setConstraints(buttons[i-1],cons);
add(buttons[i-1]);
}
}
//以上摆放各个零件
text.setText("" ;
text.setEditable(false);
text.setFont(new Font("TimesRoman",Font.BOLD,14));
text.setBackground(Color.cyan);
label.setBackground(Color.lightGray);
//以上作一些初始化工作
for(int i=0;i<15;i++)
{
buttons.addActionListener(new MyActionListener(this));
//登记每个按钮的事件监听者
}
}
//绘制屏幕
public void paint(Graphics g)
{
g.draw3DRect(35,1,130,189,true);
g.fill3DRect(35,1,130,189,true);
}
}
//自定义的监听者类监听各个按钮的动作并处理相应事件
class MyActionListener implements ActionListener
{
calculator clr;
static long number,num1;
static char opr;
public MyActionListener(calculator cl)
{
super();
clr=cl;
}
public void actionPerformed(ActionEvent e)
{
String screen;
Button eSrc = (Button)e.getSource();
String cmd = eSrc.getActionCommand().trim();
int i;
if(cmd.equals("CLR" )//按钮"CLR"被按动
{
clr.text.setText("0" ;
}
else if("+".equals(cmd)||"-".equals(cmd)||"*".equals(cmd))//运算键被按动
{
clr.text.setText("0");
num1=number;
opr=cmd.charAt(0);
}
else if("=".equals(cmd))//被按动
{
int sign;
if(number>0) sign=1;
else sign=-1;
if(sign*num1>0) sign=1;
else sign=-1;
switch(opr)
{
case '+':number=number+num1;break;
case '*':number=number*num1; break;
case '-':number=num1-number; break;
}
if(number>999999999||number<-999999999)
{
clr.text.setText("Overflow");
}
else
clr.text.setText(""+number+"");
opr = ' ';
}
else if((i=Integer.parseInt(cmd))>=0&&i<=9)//按了数字键
{
screen = clr.text.getText();
if(screen.length()<9) //Limit the width of input
{
if(screen.trim().equals("0"))
clr.text.setText(cmd);
else
clr.text.setText(screen+cmd);
number=Integer.parseInt(clr.text.getText());
}
}
}
} |
|