黑马程序员Java培训、Android培训_第8讲GUI/图形用户界面-2

本文介绍了Java GUI中的事件处理,包括组件事件、事件监听器的注册以及如何修改组件的默认事件处理方式。通过编程实例展示了如何实现当鼠标移动到按钮上时,按钮自动移动,使得鼠标无法点击。此外,还讲解了GUI组件上的图形操作,如使用Graphics类进行直线绘制,并在图形上标注坐标值。
摘要由CSDN通过智能技术生成

8.7事件处理的多重运用

       如何知道一个GUI组建到底能够触发哪几种事件?我们没必要死记硬背,在一般的集成开发环境下,如JbuilderJCreator等,当我们输入某个对象的成员分隔符,在下拉的成员列表提示框中,就能看到这个组件支持是事件;

       一个组件上的一个动作可以产生多种不同类型的事件

       一个事件监听器可以注册到多个事件源上

       在一个事件源上也可以注册对同一类事件进行处理的多个事件监听器对象;

8.8修改组件的默认事件处理方式

只有在一个组件上注册了某种事件的监听器对象后,组件才会产生相应的事件对象。

默认的processEvent方法(总入口)调用相应的processXxxEvent方法。

调用enableEvents((long eventsToEnable))方法,可以在即使没有注册事件监听器的情况下,组件也能够对某些类型的事件进行响应和产生相应的事件对象。

编程实例:在一个窗口上显示一个按钮,一旦鼠标移动到这个按钮上时,按钮就移动到了其他位置,这样,鼠标就永远无法点击到这个按钮。

import java.awt.*;

import java.awt.event.*;

package myprojects.TestMyButton;

import java.awt.*;

import java.awt.event.*;

class MyButton extends Button

{

       private MyButton friend;

       public void setFriend(MyButton friend)

{

       this.friend = friend;

}

       public MyButton(String name)

       {

              super(name);

              enableEvents(AWTEvent.MOUSE_MOTION_EVENT_MASK);

       }

       protected void processMouseMotionEvent(MouseEvent e)

       {    

              setVisible(false);

              friend.setVisible(true);

       }

}

public class TestMyButton

{

       public static void main(String  [] args)

       {

              MyButton btn1 = new MyButton("你来抓我啊!");

              MyButton btn2 = new MyButton("你来抓我啊!");

              btn1.setFriend(btn2);

              btn2.setFriend(btn1);

              Frame f = new Frame("TestMyButton");

              f.add(btn1,"North");//将btn增加到f的北部

              f.add(btn2,"South");//将btn增加到f的南部

              f.setSize(300,300);

              f.setVisible(true);

              btn2.setVisible(false);

       }

}

8.9GUI组件上的图形操作

8.9.1Graphics类与图形绘制

              Component.getGraphics方法与Graphics类。

              Graphics.drawLine(int x1,int y1,int x2,int y2)方法。

              Graphics.drawString(String str,int x,int y)方法。

              Graphics.drawString方法的坐标参数。

编程举例:以鼠标在窗口中按下时的位置作为起始点,鼠标释放时的位置作为终止点,在鼠标释放时将直线画出,并在每条直线的起始和终止点位置上打印出他们的坐标值。

import java.awt.*;

import java.awt.event.*;

class DrawLine extends Frame{

       public void DrawLine(){

              addWindowsListener(new WindowAdapter(){

                     public void windowClosing(WindowEvent e){

dispose();

System.exit(0);

}

});

this.addMouseListener(new MouseAdapter()

       {

              int orgX;

              int orgY;

              int endX;

int endY;

              public void mousePressed(MouseEvent e)

              {

                     orgX = e.getX();

                     orgY = e.getY();

              }

              public void mouseReleased(MouseEvent e)

              {

                     endX=e.getX();

                     endY=e.getY();

                     Graphics g = getGraphics();

g.setColor(Color.red);//设置绘图颜色为红色     

                     g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));//设置文本的字体

                     g.drawString(orgX +”,” +orgY,orgX,orgY);//打印鼠标按下时的坐标文本

                     g.drawString(e.getX()+”,”+e.getY(),e.getX(),e.getY());

//打印鼠标释放时的坐标文本

                     g.drawLine(orgX,orgY,e.getX(),e.getY());

              }

       }

);

}

public static void main(String [] args)

       {

              System.out.println(“Starting DrawLine”);

DrawLine mainframe = new DrawLine();

mainframe.setSize(400,400);

mainframe.setTitle(“DrawLine”);

mainframe.setVisible(true);

       }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值