鼠标事件的事件源往往与容器相关,当鼠标进入容器、离开容器,或者在容器中单击鼠标、拖动鼠标时都会发生鼠标事件。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】小应用程序设置了一个文本区,用于记录一系列鼠标事件。当鼠标进入小应用程序窗口时,文本区显示“鼠标进来”;当鼠标离开 窗口时,文本区显示“鼠标走开”;当鼠标被按下时,文本区显示“鼠标按下”,当鼠标被双击时,文本区显示“鼠标双击”;并显示鼠标的坐标。程序还显示一个红色的圆,当点击鼠标时,圆的半径会不断地变大(查看源文件)。

任何组件上都可以发生鼠标事件:鼠标进入、鼠标退出、按下鼠标等。例如,在上述程序中添加一个按钮,并给按钮对象添加鼠标监视器,将上述程序中的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】一个滚动条与显示窗口同步变化的应用程序。窗口有一个方块,用鼠标拖运方块,或用鼠标点击窗口,方块改变显示位置,相应水平和垂直滚动条的滑块也会改变它们在滚动条中的位置。反之,移动滚动条的滑块,方块在窗口中的显示位置也会改变(查看源文件)。

上述例子中,如果只要求通过滑动滑块,改变内容的显示位置,可以简单地使用滚动面板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  www.yuheng119.com (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))。

最新文章

  1. Yii 字段验证
  2. 如何修复损坏的MySQL数据表
  3. 修正ios h5上传图时的图片方向问题
  4. 再谈Jquery Ajax方法传递到action(转)
  5. 无限滚动 --demo
  6. SQL SERVER 级联删除
  7. Android编程中常用的PopupWindow和Dialog对话框
  8. 代码笔记-触摸事件插件hammer.js使用
  9. 用css样式,为表格加入边框
  10. android sqlite使用之模糊查询数据库数据的三种方式
  11. SDWebImage源码解读之SDWebImagePrefetcher
  12. easyUI---datagrid合并单元格代码实现
  13. Java静态代码块与非静态代码块
  14. [springMvc] 源码分析笔记(二)
  15. F2833x 调用DSP函数库实现复数的FFT的方法
  16. centos7 下解决mysql-server找不到安装包问题
  17. 【vim】保存文件没有权限 :w !sudo tee %
  18. 原生js实现类的添加和删除,以及对数据的add和update、view ,ajax请求 ,页面离开的操作
  19. JMeter:生成漂亮的接口/压力测试的HTML报告
  20. 虚拟机中实现Linux与Windows之间的文件传输

热门文章

  1. mysql的对象
  2. php 上传csv文件
  3. Spring学习--集合属性
  4. BigDecimal与Long、int之间的互换
  5. Bzoj1917 [Ctsc2010]星际旅行
  6. codechef September Challenge 2017 Sereja and Commands
  7. python_plot画图参数设置
  8. Linux上Core Dump文件的形成和分析
  9. PL/SQL 10 管理用户子程序
  10. python清华大学镜像