程序:
import java.awt.*;
public class deal //定义主类deal
{
public static void main(String args[]) //创建主函数main()
{myframe mf=new myframe();} //定义并创建myframe类的对象mf
}class myframe extends Frame //创建继承于Frame类的子类myframe
{
Button sa; //定义按钮
String message="你尚未点击按钮";
int cnt=0; //保存点击按钮次数
int r,g,b; //红,绿,蓝三色分量
Dimension pos=new Dimension(); //记录鼠标点击位置
String mouse="单击"; //记录鼠标点击次数,是单击还是双击(是点一下,还是快速点两下)
boolean color; //区别单击是对按钮的还是对背景的
myframe() //构造函数
{
super("我的窗口"); //调用父类构造函数,显示窗口标题
sa=new Button("按钮");
setLayout(new FlowLayout()); //设置窗口为FlowLayout()型布局
add(sa);
pack(); //调整窗口及其构件的大小
show(); //显示窗口
}
public void paint(Graphics graph)
{
if(cnt!=0&&color) //只有点击按钮时才变颜色
{ //每点击一次蓝色增加64;蓝色增加到256时绿色增加64,绿色增加到256时红色增加64
color=(((r=((g=((b=(cnt*64)%256)==0)?(g+64)%256:g)==0)&&(b==0)?(r+64)%256:r)==0)&&g==0&&b==0)?false:true;
message=new String("你点击了"+cnt+"次按钮");
}
graph.setColor(new Color(r,g,b)); //重新设置颜色
graph.drawString(message,10,50); //用新的颜色打印
graph.drawString("当前颜色: 红--"+r+";绿--"+g+";蓝--"+b,10,70);
graph.drawString("鼠标"+mouse+"位置:("+pos.width+","+pos.height+")",10,90);
} //记录鼠标单击或双击的位置
public boolean handleEvent(Event e) //重载handleEvent(Event e)方法
{
if(e.id==Event.WINDOW_DESTROY) //若用户点击窗口的“关闭”图标
{
dispose(); //关闭窗口
System.exit(0); //退出系统
}
return super.handleEvent(e); //否则,使用原事件分配体系处理其他事件
}
public boolean action(Event e,Object o) //handleEvent()方法调用action(Event e,Object o)
{
if(e.target==sa) //若点击按钮
{
cnt++; //计数器加1
color=true;
repaint(); //重画窗口
}
return super.action(e,o); //否则,使用原事件分配体系处理其他事件
}
public boolean mouseDown(Event e,int x,int y)
{
pos.width=x; //记录点击位置
pos.height=y;
if(e.clickCount==1) //判断是单击还是双击(是点一下,还是快速点两下)背景
mouse="单击";
else mouse="双击";
color=false;
repaint();//重画窗口显示新信息
return true; //截获其他所有事件,均不再处理
}
}
总结:
这是一个简单的使用handleEvent()方法,action()方法和mouseDown()方法处理事件的JAVA Application程序.
(1) 重载后的handleEvent()方法完成两个功能: 一是点击窗口关闭按钮时退出系统; 二 是调用父类handleEvent()方法把其他事件分流给action()方法处理;
(2)action()方法统计点击按钮的次数并用新颜色重画窗口;
(3)mouseDown()方法记录点击背景的横纵坐标位置,判断是单击还是双击,并把新记录信息传递给程序显示出来;
细节:
(4)记录鼠标点击位置:
Dimension pos=new Dimension();
----
pos.width=x;
s.height=y;
(5)判断是单击还是双击(是点一下,还是快速点两下)背景:
if(e.clickCount==1)
mouse="单击";
else mouse="双击";
(6)用户点击窗口的“关闭”图标:
if(e.id==Event.WINDOW_DESTROY)
{
dispose(); //关闭窗口
System.exit(0); //退出系统
(7)三色分量的改变算法:
r=((g=((b=(cnt*64)%256)==0)?(g+64)%256:g)==0)&&(b==0)?(r+64)%256:r
(8) 重载handleEvent(Event e)方法:
public boolean handleEvent(Event e)
使用原事件分配体系处理其他事件: return super.handleEvent(e);
(9) public boolean action(Event e,Object o) //handleEvent()方法调用action (Event e,Object o)
return super.action(e,o); //使用原事件分配体系处理其他事件