当前位置 : IT培训网 > Java开发 > Java教程 > Java编程开发之鼠标事件

Java编程开发之鼠标事件

时间:2016-09-02 15:17:47  来源:Java培训网  作者:IT培训网  已有:名学员访问该课程
鼠标事件的事件源往往与容器相关,当鼠标进入容器、离开容器,或者在容器中单击鼠标、拖动鼠标时都会发生鼠标事件。java语言为处理鼠标事件提供两个接口:MouseListener,MouseMotionListener接口。

鼠标,相信大家更不陌生了,只要知道电脑或者计算机就会想到鼠标键盘,但这里我们要讲到的是鼠标软件的开发,唯有软件开发成功了,才可以融合硬件,成为一个整体,让才可以用鼠标操作电脑,好了,想要学习这方面的知识,就赶紧了解下面的知识点吧!

当在一个组件上按下,释放,点击,移动或拖动鼠标时就会产生鼠标事件。MouseEvent对象捕获这个事件.

MouseEvent类继承InputEvent类,所以MouseEvent对象可以使用InputEvent类中定义的方法。

java.awt.point类表示一个点,该类包含两个用来表示坐标的公共变量x和y。

为了创建一个point,可以使用Point(int x,int y)

InputEvent类中的方法:

getWhen():  long                                      返回事件发生的时间

isAltDown(): boolean                                 如果按下alt返回true

isControlDown():  boolean                          如果按下ctrl返回true

isShiftDown():  boolean                              如果按下shift返回true

MouseEvent类中的方法:

getButton():  int                                         表明是否点击鼠标按钮

getClickCount():  int                                    返回相关事件的鼠标点击数

getPoint():   java.awt.point                         返回包含X坐标和Y坐标的point对象

getX():int                                                返回鼠标点的X

getY():   int                                               返回鼠标点的Y

Java鼠标事件-正文开始

鼠标事件的事件源往往与容器相关,当鼠标进入容器、离开容器,或者在容器中单击鼠标、拖动鼠标时都会发生鼠标事件。java语言为处理鼠标事件提供两个接口:MouseListener,MouseMotionListener接口。

MouseListener接口

MouseListener接口能处理5种鼠标事件:按下鼠标,释放鼠标,点击鼠标、鼠标进入、鼠标退出。相应的方法有:

(1) getX():鼠标的X坐标

(2) getY():鼠标的Y坐标

(3) getModifiers():获取鼠标的左键或右键。

(4) getClickCount():鼠标被点击的次数。

(5) getSource():获取发生鼠标的事件源。

(6) addMouseListener(监视器):加放监视器。

(7) removeMouseListener(监视器):移去监视器。

要实现的MouseListener接口的方法有:

(1) mousePressed(MouseEvent e);

(2) mouseReleased(MouseEvent e);

(3) mouseEntered(MouseEvent e);

(4) mouseExited(MouseEvent e);

(5) mouseClicked(MouseEvent e);

【例 11-18】小应用程序设置了一个文本区,用于记录一系列鼠标事件。当鼠标进入小应用程序窗口时,文本区显示“鼠标进来”;当鼠标离开 窗口时,文本区显示“鼠标走开”;当鼠标被按下时,文本区显示“鼠标按下”,当鼠标被双击时,文本区显示“鼠标双击”;并显示鼠标的坐标。程序还显示一个红色的圆,当点击鼠标时,圆的半径会不断地变大。

import java.applet.*;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

class MyPanel extends JPanel{

    public void print(int r){

        Graphics g = getGraphics();

        g.clearRect(0,0,this.getWidth(),this.getHeight());

        g.setColor(Color.red);

        g.fillOval(10,10,r,r);

    }

}

class MyWindow extends JFrame implements MouseListener{

    JTextArea text;

    MyPanel panel;

    int x,y,r =10;

    int mouseFlg=0;

    static String mouseStates[]={"鼠标键按下","鼠标松开","鼠标进来","鼠标走开","鼠标双击"};

    MyWindow(String s){

        super(s);

        Container con = this.getContentPane();

        con.setLayout(new GridLayout(2,1));

        this.setSize(200,300);

        this.setLocation(100,100);

        panel = new MyPanel();

        con.add(panel);

        text = new JTextArea(10,20);

        text.setBackground(Color.blue);

        con.add(text);

        addMouseListener(this);

        this.setVisible(true);

        this.pack();

    }

    public void paint(Graphics g){

        r = r+4;

        if(r>80){

            r=10;

        }

        text.append(mouseStates[mouseFlg]+"了,位置是:" +x+","+y+"\n");

        panel.print(r);

    }

    public void mousePressed(MouseEvent e){

        x = e.getX();

        y = e.getY();

        mouseFlg = 0;

        repaint();

    }

    public void mouseRelease(MouseEvent e){

        x = e.getX();

        y = e.getY();

        mouseFlg = 1;

        repaint();

    }

    public void mouseEntered(MouseEvent e){

        x = e.getX();

        y = e.getY();

        mouseFlg = 2;

        repaint();

    }

    public void mouseExited(MouseEvent e){

        x = e.getX();

        y = e.getY();

        mouseFlg = 3;

        repaint();

    }

    public void mouseClicked(MouseEvent e){

        if(e.getClickCount()==2){

            x = e.getX();

            y = e.getY();

            mouseFlg = 4;

            repaint();

        }

        else{}

    }

}

public class Example6_8 extends Applet{

    public void init(){

        MyWindow myWnd = new MyWindow("鼠标事件示意程序");

    }

}

任何组件上都可以发生鼠标事件:鼠标进入、鼠标退出、按下鼠标等。例如,在上述程序中添加一个按钮,并给按钮对象添加鼠标监视器,将上述程序中的init()方法修改成如下形式,即能示意按钮上的所有鼠标事件。

JButton button;

public void init(){

    button = new JButton(“按钮也能发生鼠标事件”);

    r = 10;

    text = new JTextArea(15,20);

    add(button);

    add(text);

    button.addMouseListener(this);

}

 

如果程序希望进一步知道按下或点击的是鼠标左键或右键,鼠标的左键或右键可用InputEvent类中的常量BUTTON1_MASK和BUTTON3_MASK来判定。例如,以下表达式判断是否按下或点击了鼠标右键:

    e.getModifiers()==InputEvent. BUTTON3_MASK

MouseMotionListener接口

 

MouseMotionListener接口处理拖动鼠标和鼠标移动两种事件。

 

注册监视器的方法是:

    addMouseMotionListener(监视器)

要实现的的接口方法有两个:

(1) mouseDragged(MouseEvent e)

(2) mouseMoved(MouseEvent e)

【例 11-19】一个滚动条与显示窗口同步变化的应用程序。窗口有一个方块,用鼠标拖运方块,或用鼠标点击窗口,方块改变显示位置,相应水平和垂直滚动条的滑块也会改变它们在滚动条中的位置。反之,移动滚动条的滑块,方块在窗口中的显示位置也会改变。

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

class MyWindow extends JFrame{

    public MyWindow(String s){

        super(s);

        Container con = this.getContentPane();

        con.setLayout(new BorderLayout());

        this.setLocation(100,100);

        JScrollBar xAxis = new JScrollBar(JScrollBar.HORIZONTAL,50,1,0,100);

        jScrollBar yAxis = new jScrollBar(JScrollBar.VERTICAL,50,1,0,100);

        MyListener listener = new MyListener(xAxis,yAxis,238,118);

        Jpanel scrolledCanvas = new JPanel();

        scrolledCanvas.setLayout(new BorderLayout());

        scrolledCanvas.add(listener,BorderLayout.CENTER);

        scrolledCanvas.add(xAix,BorderLayout.SOUTH);

        scrolledCanvas.add(yAix,BorderLayout.EAST);

        con.add(scrolledCanvas,BorderLayout.NORTH);

        this.setVisible(true);

        this.pack();

    }

    public Dimension getPreferredSize(){

        return new Dimension(500,300);

    }

}

class MyListener extends JComponent implements MouseListener, MouseMotionListener,AdjustmentListener{

    private int x,y;

    private JScrollBar xScrollBar;

    private JScrollBar yScrollBar;

    private void updateScrollBars(int x,int y){

        int d;

        d = (int)(((float)x/(float)getSize().width)*100.0);

        xScrollBar.setValue(d);

        d = (int)(((float)y/(float)getSize().height)*100.0);

        yScrollBar.setValue(d);

    }

    public MyListener(JScrollBar xaxis,JScrollBar yaxis,int x0,int y0){

        xScrollBar =xaxis;

        yScrollBar =yaxis;

        x = x0;

        y=y0;

        xScrollBar.addAdjustmentListener(this);

        yScrollBar.addAdjustmentListener(this);

        this.addMouseListener(this);

        this.addMouseMotionListener(this);

    }

    public void paint(Graphics g){

        g.setColor(getBackground());

        Dimension size = getSize();

        g.fillRect(0,0,size.width,size.height);

        g.setColor(Color.blue);

        g.fillRect(x,y,50,50);

    }

    public void mouseEntered(MouseEvent e){}

    public void mouseExited(MouseEvent e){}

    public void mouseClicked(MouseEvent e){}

    public void mouseRelease(MouseEvent e){}

    public void mouseMoved(MouseEvent e){}

    public void mousePressed(MouseEvent e){

        x = e.getX();

        y = e.getY();

        updateScrollBars(x,y);

        repaint();

    }

    public void mouseDragged(MouseEvent e){

        x = e.getX();

        y = e.getY();

        updateScrollBars(x,y);

        repaint();

    }

    public void adjustmentValueChanged(AdjustmentEvent e){

        if(e.getSource()==xScrollBar)

            x=(int)((float)(xScrollBar.getValue()/100.0)*getSize().width);

        else if(e.getSource()==yScrollBar)

            y = (int)((float)(yScrollBar.getValue()/100.0)*getSize().height);

        repaint();

    }

}

public class Example6_9{

    public static void main(){

        MyWindow myWindow = new MyWindow("滚动条示意程序");

    }

}

上述例子中,如果只要求通过滑动滑块,改变内容的显示位置,可以简单地使用滚动面板JScrollPane。如果是这样,关于滚动条的创建和控制都可以免去,直接由JScrollPane内部实现。参见以下修改后的MyWindow的定义:

class MyWindow extends JFrame{

    public MyWindow(String s){

        super(s);

        Container con = this.getContentPane();

        con.setLayout(new BorderLayout());

        this.setLocaltion(100,100);

        MyListener listener = new MyListener();

        listener.setPreferredSize(new Dimension(700,700));

        JScrollPane scrolledCanvas = new JScrollPane(listener);

        this.add(scrolledCanvas,BorderLayout.CENTER);

        this.setVisible(true);

        this.pack();

    }

    public Dimension getPreferredSize(){

        return new Dimension(400,400);

    }

}

鼠标指针形状也能由程序控制 ,setCursor()方法能设置鼠标指针形状。例如,代码setCursor(Cursor.getPredefinedCursor(cursor.WAIT_CURSOR))。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
------分隔线----------------------------
Java教程
1、Java 概述
1.1 Java语言概述
1.2 Java虚拟机以及跨平台原理
1.3 Java的主要就业方向
1.4 Java的不同版本
1.5 Java开发环境搭建
1.6 第一个Java程序示例
1.7 Java类和对象的概念
1.8 Java类库及其组织结构
1.9 Java import
2、Java 语法基础
2.1 Java数据类型以及变量的定义
2.2 Java数据类型转换
2.3 Java运算符
2.4 Java流程控制
2.5 Java数组的定义和使用
2.6 Java字符串(String)
2.7 Java StringBuffer与StringBuider
2.8 强调一下编程风格
3、Java 类与对象
3.1 Java类的定义及其实例化
3.2 Java访问修饰符
3.3 Java变量的作用域
3.4 Java this关键字详解
3.5 Java方法重载
3.6 Java类的基本运行顺序
3.7 Java包装类、拆箱和装箱详解
3.8 再谈Java包
3.9 源文件的声明规则
4、Java 继承和多态
4.1 继承的概念与实现
4.2 Java super关键字
4.3 继承中的方法的覆盖和重载
4.4 多态和动态绑定
4.5 instanceof 运算符
4.6 多态对象的类型转换
4.7 Java static关键字
4.8 Java final关键字
4.9 Java Object类
5、面向对象高级特性
5.1 Java内部类及其实例化
5.2 内部类的分类
5.3 抽象类的概念和使用
5.4 接口的概念和使用
5.5 接口和抽象类的区别
5.6 Java 泛型
5.7 泛型通配符和类型参数的范围
6、异常处理
6.1 异常处理基础
6.2 异常类型Java语言中常见的异常类型有哪些
6.3 未被捕获的异常
6.4 try和catch的使用
6.5 多重catch语句的使用
6.6 try语句的嵌套
6.7 throw:异常的抛出
6.8 throws子句
6.9 finally块
6.10 Java的内置异常
6.11 创建自己的异常子类
6.12 断言
7、线程编程
7.1 线程的概念
7.2 Java线程模型
7.3 主线程
7.4 创建线程
7.5 创建多线程
7.6 isAlive()和join()的使用
7.7 线程优先级
7.8 线程同步
7.9 线程间通信
7.10 线程死锁
7.11 线程的挂起、恢复和终止
8、输入输出(IO)操作
8.1 输入输出基本概念
8.2 面向字符的输入流
8.3 面向字符的输出流
8.4 面向字节的输入输出流
8.5 面向字节流的应用
8.6 文件与目录管理
8.7 文件的随机读写
8.8 文件的压缩处理
9、常用类库、向量与哈希
9.1 Java基础类库
9.2 Object类
9.3 Java语言包(java.lang)简介
9.4 日期和时间类
9.5 向量及其应用
9.6 哈希表及其应用
10、图形界面(GUI)设计
10.1 图形界面设计基础
10.2 框架窗口
10.3 标签、按钮和按钮事件
10.4 面板
10.5 布局设计
10.6 文本框和文本区
10.7 文本框和文本区的输入输出
10.8 选择框和单选按钮
10.9 列表和组合框
10.10 菜单
10.11 对话框
10.12 滚动条
10.13 鼠标事件
10.14 键盘事件
11、图形、图像与多媒体
11.1 绘图基础
11.2 设置字型和颜色
11.3 绘图模式
11.4 Graphics类的绘图方法
11.5 Graphics2D类的绘图方法
11.6 图像处理基础
11.7 图像缓冲技术
11.8 多媒体基础
12、网络与数据库编程
12.1 IP地址和InetAddress类
12.2 统一资源定位符
12.3 套接字(Socket)
12.4 数据库连接
12.5 几个重要的类和接口
12.6 数据库查询
12.7 数据库更新
12.8 插入记录
12.9 修改记录
12.10 删除记录