当前位置 : 首页> Java教程 > Java编程开发之鼠标事件

Java编程开发之鼠标事件

时间:2016-09-02 15:17   已访问:334次

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

当在一个组件上按下,释放,点击,移动或拖动鼠标时就会产生鼠标事件。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))。


推荐内容