鼠标事件:MouseEventer接口的5个方法_世界热文
鼠标事件
鼠标事件 MouseEvent,包括以下动作:
mouseClicked //鼠标点击mousePressed //鼠标按下mouseReleased //鼠标抬起mouseEntered //鼠标移入mouseExited //鼠标移除mouseMove //鼠标移动mouseDragged //鼠标拖拽mouseWheelMoved //鼠标滚轮
(相关资料图)
所有动作分为三类监听器:
addMouseListener() //点击、按下、抬起、移入、移出addMouseMotionListener() //移动、拖拽addMouseWheelListener() //鼠标滚轮转动
MouseListener接口有5个方法,每次实现时要重写它们:
panel.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {}@Overridepublic void mousePressed(MouseEvent e) {}@Overridepublic void mouseExited(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic void mouseClicked(MouseEvent e) {}});
注意:鼠标点击事件(mouseClicked)触发的时机:按下和松开在同一个点。如果是判断双击和三机,有时间限制。如果是双击,会先出发单击;如果是三击,会先出发双击、单击
鼠标事件对象 MouseEvent:
getX() / getY() //点击中的坐标,相对于该控件getXOnScreen() / getYOnScreen() //相对于屏幕的坐标getSource() //事件源,即点中的控件getButton() //左键、中键、右键getClickedCount() //单击、双击、三击
鼠标适配器
假设我们只需要鼠标点击事件,但是在实现 MouseListener 接口时发现要重写所有的 5 个方法,太冗余。
MouseAdapter 类实现了 MouseListener 接口和其它的鼠标监听器接口,方法里什么也没写,我们可以继承这个 MosueAdapter 类然后重写我们需要的方法。
panel.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {if(e.getButton() == MouseEvent.BUTTON1)System.out.println("左键");else if(e.getButton() == MouseEvent.BUTTON2) System.out.println("中键");else if(e.getButton() == MouseEvent.BUTTON3)System.out.println("右键");int cc = e.getClickCount();if(cc == 1)System.out.println("单击");else if(cc == 2)System.out.println("双击");else if(cc == 3)System.out.println("三击");System.out.println("鼠标位置: " + e.getX() + "," + e.getY());}});
练习1 图片查看器
需求:
加载文件夹里的图片显示显示缩略图点击缩略图时,显示大图当前图片高亮显示
Demo.java
package my;import java.awt.Container;import java.awt.Graphics;import java.awt.Image;import java.net.URL;import javax.imageio.ImageIO;import javax.swing.JFrame;import javax.swing.JLabel;public class Demo {public static void main(String[] args) {MyFrame frame = new MyFrame("Demo");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(700, 300);frame.setVisible(true);}}
MyFrame.java
package my;import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Image;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.File;import java.util.ArrayList;import javax.imageio.ImageIO;import javax.swing.BorderFactory;import javax.swing.JFrame;import javax.swing.JPanel;public class MyFrame extends JFrame{MyPanel showPanel = new MyPanel();ArrayListthumbMyLabel = new ArrayList<>();public MyFrame(String title) {super(title);JPanel thumbPanel = new JPanel();thumbPanel.setLayout(new FlowLayout());File file = new File("./src/images");System.out.println(file.getAbsolutePath());File[] imagesPath = file.listFiles();for(File imagePath : imagesPath) {try {Image img = ImageIO.read(imagePath);MyLabel label = new MyLabel(img);label.addMouseListener(new MouseListener());thumbPanel.add(label);thumbMyLabel.add(label);}catch(Exception e) {e.printStackTrace();}}JPanel root = new JPanel();this.setContentPane(root);root.setLayout(new BorderLayout());root.add(thumbPanel, BorderLayout.NORTH);root.add(showPanel, BorderLayout.CENTER);}private class MouseListener extends MouseAdapter{@Overridepublic void mouseClicked(MouseEvent e) {MyLabel label = (MyLabel)e.getSource();for(MyLabel thumbLabel : thumbMyLabel) {if(thumbLabel == label) {thumbLabel.setBorder(BorderFactory.createLineBorder(Color.BLUE, 4));}else {thumbLabel.setBorder(BorderFactory.createLineBorder(Color.WHITE, 4));}}Image img = label.img;showPanel.setImage(img);showPanel.repaint();}}}
MyLabel.java
package my;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Image;import javax.swing.JLabel;public class MyLabel extends JLabel{public Image img;private int imgW;private int imgH;public MyLabel(Image img) {this.img = img;imgW = img.getWidth(null);imgH = img.getHeight(null);this.setPreferredSize(new Dimension(50, 50 * imgH / imgW));this.setOpaque(false);}public void setImage(Image img) {this.img = img;}@Overrideprotected void paintComponent(Graphics g) {int width = this.getWidth();int height = this.getHeight();g.setColor(Color.LIGHT_GRAY);g.fillRect(0, 0, width, height);if(img != null) {g.drawImage(img, 0, 0, width, height, null);}}}
MyPanel.java
package my;import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import javax.swing.JPanel;public class MyPanel extends JPanel{Image img;public void setImage(Image img) {this.img = img;}@Overrideprotected void paintComponent(Graphics g) {int width = this.getWidth();int height = this.getHeight();g.setColor(Color.WHITE);g.fillRect(0, 0, width, height);g.setColor(Color.BLACK);g.drawRect(0, 0, width, height);if(img != null) {int imgW = img.getWidth(null);int imgH = img.getHeight(null);int fitW = width;int fitH = fitW * imgH / imgW;if(fitH > height) {fitH = height;fitW = fitH * imgW / imgH;}int x = (width - fitW) / 2;int y = (height - fitH) / 2;g.drawImage(img, x, y, fitW, fitH, null);}}}
显示:
标签:
相关推荐:
最新新闻:
- 鼠标事件:MouseEventer接口的5个方法_世界热文
- 天天观察:索尼发布会:三月PS+二三档游戏公开:《幽灵线东京》、《神秘海域盗贼遗产》等
- 《街头霸王6》新实机 展示嘉米等三个新角色
- 晨报:《死亡岛2》3月2日公开新实机 《真人快打12》确认于今年发布_焦点速看
- 世界微速讯:State of Play:《街头霸王6》新预告 南美热裤少女闪亮登场
- 全球快看点丨创见u盘怎么样?创见U盘价格及快速修复方法
- 当前速递!什么是基础设施建设?础设施的特点与作用
- 支付宝用zhifubao.com域名意欲何为?详情介绍-世界独家
- 【世界时快讯】lic是什么文件?lic文件怎么打开?
- 前沿热点:xbox游戏机怎么样?微软Xbox电视游戏机评测
- 马克·扎克伯格简介 全球最年轻的亿万富豪
- 环球资讯:光载毫米波无线电通信技术现状介绍 光载毫米波无线电通信技术的发展
- 什么是频谱分析仪?频谱分析仪详情介绍 全球今热点
- 全球观速讯丨二进制转八进制的两种方法
- 世界热资讯!苹果作为市场上的主流手机有哪些维修点?苹果手机维修点查询
- 网文6个最好的免费在线音乐识别器——Shazam
- 接口测试工具——SoapUI下载安装教程
- 如何制作手机上网和多台电脑上WIFI?制作虚拟路由器免费WIFI方法-快消息
- windowsserver2012配置php环境的步骤
- 当前快看:电脑屏幕录像应该怎么操作?录制屏幕方法
- 帝尔复读机怎样?帝尔复读机价格性能介绍_焦点热议
- 博士音响好不好?博士音响品牌介绍:每日头条
- 海顿燃气壁挂炉好不好?海顿燃气壁挂炉优点介绍
- 稻盛和夫为什么值得学习?《干法》精华解读 世界聚看点
- 中国现在有多少家苹果零售店?苹果零售店在中国的发展历程
- 服务器遭遇DDoS攻击时会有哪些症状?DDos攻击的基本原理及症状
- 计算机b级英语翻译 英语B级考试翻译必备常用短句
- 每日资讯:什么叫电子邮箱?注册电子邮箱的方法有哪些?
- u盘和硬盘都需要建立文件系统吗?linux系统下创建文件系统
- 不可预料的压缩文件末端解决办法是什么?解决方法步骤_热点在线
- 【Bootstrap4】列表组的创建方法
- 努比亚Z17畅享版和Z17有什么区别?性能与双摄区别在哪?:焦点精选
- 速看:如何实现一个打点计时器?javascript打点计时器
- java爬虫框架介绍:Heritrix优势劣势
- 【科研必备】初中数学符号及读法大全(收藏版)
- 《自杀小队:战胜正义联盟》4人合作游玩演示视频-全球热议
- 亚马逊雨林求生游戏《绿色地狱VR》将支持PSVR2:热资讯
- 小米红米高性能笔记本特价仅需4499元-环球精选
- 游戏玩家必备!京东京造三模游戏鼠标仅229元
- 环球即时看!27寸4K办公 红米显示器不到1500
- 27寸2K 300Hz超高刷新 华硕ROG推出电竞新品 环球简讯
- 全球观察:又来忽悠?消息称苹果表将能无伤测量血糖
- 《THE FINALS》增加PS5/XS版 PC版封测3/7-21进行 快报
- 《死亡岛2》3月2日23点公开实机演示 一场杀戮将临
- AMD R9 7945HX大放异彩 16核心打平Intel 24核心|焦点简讯
- 趁热打铁!曝剧版《霍格沃茨之遗》制作中:前沿资讯
- 《极限竞速:地平线5》“拉力冒险”新扩展包公布
- 火影20周年作品《鸣人X博人究极忍者风暴连接》公布
- 支持8K!凯宠TypeC线100瓦只要29.45元
- 热门看点:百万英里 Cruise无人驾驶汽车达成里程碑
- 支持8K!凯宠TypeC线100瓦只要29.45元
- 全国有6亿栋房屋?飙上热搜!百亿新冠自测公司暴跌99.6%,曾是美国"第一"!企业月薪4万招人去养鸡…
- 《原子之心》PC平台性能分析:多种配置下流畅运行-环球今亮点
- 联想小新黑屏死机成投诉重灾区 QQ维权群已有近千人:动态焦点
- "姐夫"要回来啦!《守望先锋》原班人马组建新工作室
- Fami通新一周销量榜 《霍格沃茨之遗》继续登顶 环球热资讯
- 拒绝美式霸凌!Xbox称10年的COD合约派对大家都能参与
- 世界视点!B社确认三上真司即将离职:感谢他的贡献
- Fami通满分神作 《428:被封锁的涩谷》Steam 27元促销
- 每日消息!明基E540智能商务投影机 让我从此爱上开会!
- 首个香港直航山东旅游团来青,点名要去老城区看看 环球头条
- 《八方旅人2》发售倒计时1天!商人小队邀您上号游戏
- 徐工晒《流浪地球2》“化缘”记录 网友:一眼诈骗 当前快播
- 三上离开后动向猜测 可能成立一家中国投资的工作室
- 尼克尔Z 400mm f/4.5 VR S荣膺DPReview读者选择最佳定焦镜头奖
- 世界信息:《最后生还者》幕后花絮:乔尔骑的马竟然是假的!
- 《龙之谷》官宣将推出回忆服 首曝内容宣传片
- 雷蛇继续推出2023款灵刃15游戏本, i7+RTX 4060版卖19999元|全球今日报
- 【天天热闻】影驰星曜DDR5 6800MHz内存开售,纯白系列再添一员
- 硬核!为防95后员工摸鱼 山东一公司办公桌旁装监控-头条焦点
- 天天最新:《霍格沃茨之遗》或将有续作?华纳想打造成长期IP
- 三上真司即将离开B社-全球讯息
- 环球新资讯:人间烟火气!梧州这条苍海特色网红街区,你有去打卡过吗?
- 联想个人云A1仅售749元,内置3TB硬盘,附赠爱奇艺白金会员年卡
- 魅族20 Pro配置曝光:主摄5000万像素、搭载二代骁龙8处理器-环球热消息
- 雷蛇灵刃新款开售,搭载RTX 40系显卡+i7-13800H
- 搭载骁龙8 Gen 2处理器!索尼Xperia 5 V跑分曝光 世界热消息
- 影驰HOF Pro DDR5系列内存开售,最高32GB 8000MHz 天天播报
- 战神开发商恭喜《地平线:山之召唤》发售:奎爷戴上PSVR2
- 真人剧《最后生还者》乔尔恐慌症发病被做表情包 网友疯狂玩梗|世界动态
- 新资讯:清水崇日恐电影新作《忌怪岛》新卡司公开 6月16日上映
- 新资讯:韦伯太空望远镜发现“本不应存在”星系 可能颠覆人类认知
- 全球播报:厨师模拟游戏《厨师生涯》发布新预告 今日发售
- 世界视点!跨境电商系统积加ERP,独立部署账号数据安全满级
- 搭载12代i5处理器!小米RedmiBook Pro 14 2022款4599元入手:资讯推荐