java事件处理.docx
《java事件处理.docx》由会员分享,可在线阅读,更多相关《java事件处理.docx(11页珍藏版)》请在冰豆网上搜索。
java事件处理
运行结果:
点击red按钮
点击green按钮
点击blue按钮
点击圆的内部一次
点击圆的内部二次
点击圆的内部三次
点击圆的内部四次
点击圆的内部五次
圆循环变回背景色
在圆的内部时,光标为十字
代码如下:
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.awt.font.FontRenderContext;
importjava.awt.geom.Ellipse2D;
importjava.awt.geom.Point2D;
importjava.awt.geom.Rectangle2D;
@SuppressWarnings("unused")
publicclassButtonCircle{
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable()
{
publicvoidrun()
{
JFramef=newButtonFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
});
}}
@SuppressWarnings("serial")
classButtonFrameextendsJFrame{
publicButtonFrame(){
this.setTitle("ColorTest");
this.setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
this.add(newButtonPanel());
}
publicstaticfinalintDEFAULT_WIDTH=800;
publicstaticfinalintDEFAULT_HEIGHT=600;
}
@SuppressWarnings("serial")
classButtonPanelextendsJPanel{
publicButtonPanel(){
JButtonb1=newJButton("Red");//构造按钮
JButtonb2=newJButton("Green");
JButtonb3=newJButton("Blue");
this.add(b1);//将按钮添加到面板上
this.add(b2);
this.add(b3);
//用适当的颜色构造监听器对象
ColorActiona1=newColorAction(Color.RED);
ColorActiona2=newColorAction(Color.GREEN);
ColorActiona3=newColorAction(Color.BLUE);
//将监听器注册到组件上
b1.addActionListener(a1);
b2.addActionListener(a2);
b3.addActionListener(a3);
//实现两个监听器对象
MouseHandlermh=newMouseHandler();
MouseMotionHandlermoh=newMouseMotionHandler();
this.addMouseListener(mh);
this.addMouseMotionListener(moh);
}
/**/
publicvoidpaintComponent(Graphicsg){
Graphics2Dg2=(Graphics2D)g;
super.paintComponent(g2);
doublecenterX=400;//设置圆的位置
doublecenterY=300;
doubleradius=150;
Ellipse2Dcircle=newEllipse2D.Double();
circle.setFrameFromCenter(centerX,centerY,centerX+radius,centerY+radius);
g2.draw(circle);//画圆
}
privateclassColorActionimplementsActionListener{
privateColorbackgroundColor;
publicColorAction(Colorc){
backgroundColor=c;
}
publicvoidactionPerformed(ActionEvente){//将圆设置为指定颜色
Graphics2Dg=(Graphics2D)getGraphics();
g.setPaint(backgroundColor);
g.fillOval(250,150,300,300);
}
}
classMouseHandlerextendsMouseAdapter{
inti=1;
publicvoidmouseClicked(MouseEvente){
intx=e.getX();
inty=e.getY();
Point2Dp=newPoint2D.Double(x,y);
Graphics2Dg=(Graphics2D)getGraphics();
Colorc=getBackground();
if((((p.getX()-400)*(p.getX()-400)+(p.getY()-300)*(p.getY()-300))<=22500)&&e.getClickCount()==1){
if(i%4==1){//点击一下,设置为背景色
g.setPaint(c);
g.fillOval(250,150,300,300);
i++;}
elseif(i%4==2){//点击第二下,设置为红色
g.setPaint(Color.RED);
g.fillOval(250,150,300,300);
i++;}
elseif(i%4==3){//点击第三下,设置为绿色
g.setPaint(Color.GREEN);
g.fillOval(250,150,300,300);
i++;}
elseif(i%4==0){//点击第四下,设置为蓝色
g.setPaint(Color.BLUE);
g.fillOval(250,150,300,300);
i++;}
}
}
}
classMouseMotionHandlerimplementsMouseMotionListener{
publicvoidmouseMoved(MouseEventme){
Point2Dp=me.getPoint();
if(((p.getX()-400)*(p.getX()-400)+(p.getY()-300)*(p.getY()-300))<=22500){//若鼠标处于圆范围内
setCursor(Cursor.getPredefinedCursor(
Cursor.CROSSHAIR_CURSOR));//将光标变为十字光标
}else
setCursor(Cursor.getDefaultCursor());
}
@Override
publicvoidmouseDragged(MouseEvente){
//TODOAuto-generatedmethodstub
}}
}