SWT鼠标单击实现

最近,我做了一些SWT定制小部件的开发,偶然发现了一个问题, 为什么没有默认的SWT鼠标单击侦听器? 由于这个主题有时会提出,所以我认为写一两句话来说明背后的理性基础以及如何实现鼠标单击通常不会受到伤害。

SWT鼠标请点击

事件驱动的窗口小部件工具箱通常区分低级事件和语义事件。 低电平事件表示窗口系统出现或低电平输入。 鼠标和键盘输入基本上属于此组。

语义事件又是控件特定的用户交互的结果,并且可能由一个或多个低级事件组成。 例如,可以将按钮单击指定为鼠标下移,然后将其指定为鼠标上 移,而鼠标不会离开控件边界

问题的关键是控件特定的用户交互 。 可以将图像单击指定为鼠标下移,然后单击鼠标上移而不离开图像特定区域的边界。 差别不大,但意义重大。

语义事件类型SWT.Selection例如,对应于上面为org.eclipse.swt.widgets.Button控件提供的按钮单击规范。 但是它的组成在org.eclipse.swt.widgets.Slider上却大不相同。 后者的行为很像图像单击定义:

鼠标单击滑块

显然,没有人愿意为每个控件区域上的鼠标单击事件添加特定的侦听器。 这是更舒适的基础上那些低级别的赛事有一个语义抽象,对关键点或兴趣通知观察者1

单击按钮以自定义小部件

那么,按钮单击事件实现在自定义SWT小部件的(子)组件上看起来如何? 例如,考虑一个由几个标签Composite ,无论出于何种原因,其中一个标签都应作为动作触发。

点击行为可以通过在SWT的类型化事件抽象之上运行一个小的动作包装器来实现。 它可以实现/扩展org.eclipse.swt.events.MouseListener/-MouseAdapter并且可以在控件上注册以用作按钮单击侦听器:

static class ClickBehavior extends MouseAdapter {private final Runnable action;ClickBehavior( Runnable action ) {this.action = action;}@Overridepublic void mouseDown( MouseEvent event ) {// TODO: decent implementation}@Overridepublic void mouseUp( MouseEvent event ) {// TODO: decent implementation}
}

如您所见, ClickBehavior类包装了一个Runnable ,该Runnable应该通过单击观察到的控件来触发。 为此,第一步是验证是否已按下鼠标左键,并标记观察者已准备好触发 。 一个简单的mouseDown实现可能如下所示:

public static final int LEFT_BUTTON = 1;
[...]
public void mouseDown( MouseEvent event ) {if( event.button == LEFT_BUTTON ) {armed = true;}
}

第二步是检查是否在受监视的控件范围内发生了随后的mouseUp事件。 如果这样(并准备好),则语义条件已经满足并且可以触发该动作2

public void mouseUp( MouseEvent event ) {if( armed && inRange( event ) ) {action.run();}armed = false;
}static boolean inRange( MouseEvent event ) {Point size= ( ( Control )event.widget ).getSize();return    event.x >= 0 && event.x <= size.x&& event.y >= 0&& event.y <= size.y;
}

此实现足以处理例如org.eclipse.widgets.Label上的“按钮单击”事件,如以下代码片段所示:

final Shell shell = [...];
Label label = new Label( shell, SWT.NONE );
label.setText( "Click me!" );
label.addMouseListener(new ClickBehavior( new Runnable() {@Overridepublic void run() {MessageBox box = new MessageBox( shell );box.setMessage( "Label was clicked." );box.setText( "Message" );box.open();}} ) );

瞧,这是在运行时的样子:

标签点击

包起来

如上所述,SWT省略通用鼠标单击实现是有充分的理由的。 给出的示例显示了如何为自定义窗口小部件实现简单的按钮单击语义。 但是,还有更多需要考虑的地方。 小部件通常会在视觉上对鼠标按下做出反应 ,例如,表明它们已准备好触发。

因此,自定义窗口小部件代码很快就被炸毁,并趋于模糊与事件相关的各种责任。 为了将事件语义与视觉效果代码完全区分开,我通常在小助手类中提取第一个。 我什至有一个用于ButtonClick -click事件的通用版本,称为ButtonClick ,它是Xiliary P2存储库的SWT实用程序功能的一部分。

如果所有与鼠标单击相关的内容引起了对鼠标单击的实际应用的需求:如何使用下面的社交按钮共享知识?

  1. 细心的读者可能已经意识到,我忽略了滑块的拖动区域,该区域也增加了选择语义。 这是因为它与单击行为不匹配,并且将超出本讨论的范围。
  2. 值得一提的是,现实世界中的实现应确保在action.run()期间抛出运行时异常的情况下,也重置武装标志。

翻译自: https://www.javacodegeeks.com/2014/12/swt-mouse-click-implementation.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三周进度总结

本周大部分时间花费在了考驾照上&#xff0c;所以没有在学习上用太多的时间。在不多的时间里看完了老师推荐的《大道至简》这本书&#xff0c;从书中学到了很多编程方面的思想&#xff0c;受益匪浅。还完成了2个代码的编译&#xff0c;一个是判断AB和C的关系&#xff0c;这个并…

页面中插入视频的方法---video/embed/iframe总结

1. video标签 当前主流的方法当然是HTML5中的video标签了&#xff0c;但是 当前&#xff0c;video 元素只支持三种视频格式&#xff1a; Ogg 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件 MPEG4 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件 WebM 带有 VP…

Spring请求级备忘录

介绍 记忆化是一种方法级别的缓存技术&#xff0c;用于加快连续调用的速度。 这篇文章将演示如何仅使用Spring AOP实现任何数据源的请求级可重复读取。 Spring缓存 Spring提供了非常有用的缓存抽象 &#xff0c;允许您将应用程序逻辑与缓存实现细节分离。 Spring Caching使用…

从一个帖子看 所谓“知乎” 的真实水平

帖子地址&#xff1a;https://www.zhihu.com/question/27535713 明末尤其是崇祯后期&#xff0c;最大的背景是天灾瘟疫反复肆虐&#xff0c;三成人死于饥荒&#xff0c;三成人死于瘟疫&#xff0c;四成为生存从贼是当时中原的真实写照。 抛开这个最大前提不谈&#xff0c;去乱弹…

新的开始,新的挑战

我承认&#xff0c;我还比较年轻&#xff0c;我承认&#xff0c;我的经验很少&#xff0c;我承认&#xff0c;我的能力还是比较小。。。。。。 但是&#xff0c;我不怕&#xff0c;我敢往前走&#xff0c;错了我就改&#xff0c;不行我就努力&#xff0c; 要么痛苦的坚持到游戏…

响应式布局笔记

一. 布局设计 固定布局&#xff1a;以像素作为页面的基本单位&#xff0c;不管设备屏幕及浏览器宽度&#xff0c;只设计一套尺寸&#xff1b; 可切换的固定布局&#xff1a;同样以像素作为页面单位&#xff0c;参考主流设备尺寸&#xff0c;设计几套不同宽度的布局。通过设别的…

麦冬

麦冬 中文学名&#xff1a;麦冬 拉丁学名&#xff1a;Ophiopogon japonicus (Linn. f.) Ker-Gawl. 别称&#xff1a;麦门冬、沿阶草 植物界百合科 主要价值&#xff1a; 1、有养阴润肺、益胃生津、清心除烦的功效&#xff0c;用于肺燥干咳、阴虚痨嗽、喉痹咽痛、津伤口渴、…

如何使用Callable和FutureTask

介绍 从Java 1.5开始&#xff0c;在java.util.concurrent下有了新的对象集。 该程序包具有许多不同的类&#xff0c;包括线程队列。 当我用Java 1.2编程时&#xff0c;我本可以使用那些&#xff01; 当我开始看这些新玩具时&#xff0c;我变得犹豫不决。 这是什么可调用的东西&…

NodeJS的安装与使用

Node.js 就是运行在服务端的 JavaScript。越来越多的人在使用它&#xff0c;通过他我们可以用JavaScript来构建后台。对于前端程序员而言&#xff0c;不言而喻这是一条多么令人振奋的消息。对于后台程序员而言&#xff0c;这也是一种很不错的选择。 下面我就来讲解下nodejs的安…

转载 300年前的黑色“巫女”

1741年&#xff0c;北极。 白令招呼水手们把船靠上小岛的时候&#xff0c;一排黑色的鸬鹚站在陡峭的悬崖上&#xff0c;像一群黑色的巫女&#xff0c;一动不动朝着他们张望。白令顿时有了一种不祥的预兆。 果然&#xff0c;刚刚上岛&#xff0c;就遭到古怪的兰狐的袭击&#xf…

华为在爱尔兰增设150个LTE研发职位

据国外媒体报道中国电信和网络跨国公司华为技术预计将在未来两年内在爱尔兰增设150个职位。华为公司目前设在爱尔兰都柏林、阿斯隆和科克的业务处共有50名员工。现在&#xff0c;公司已经投标竞购牌照&#xff0c;目的是为在爱尔兰推出第四代宽带进行基础设施开发。华为公司爱尔…

Java EE 7 / JAX-RS 2.0 – REST上的CORS

Java EE REST应用程序通常在开箱即用的开发机器上运行良好&#xff0c;该开发机器上所有服务器端资源和客户端UI均指向“ localhost”或127.0.0.1。 但是&#xff0c;当涉及跨域部署时&#xff08;当REST客户端不再与托管REST API的服务器位于同一域时&#xff09;&#xff0c;…

jQuery框架-1.jQuery基础知识

jQuery简介 jQuery&#xff0c;顾名思义是JavaScript和查询&#xff08;Query&#xff09;&#xff0c;jQuery是免费、开源的。它可以简化查询DOM对象、处理事件、制作动画、处理Ajax交互过程且兼容多浏览器的javascript库&#xff0c;核心理念是write less,do more(写得更少,…

用CornerStone配置SVN,HTTP及svn简单使用说明

原文地址&#xff1a;&#xff1a;&#xff1a;http://my.oschina.net/joanfen/blog/194491#OSC_h2_3 一、下载地址二、安装破解方法三、添加repository 1.SVN配置 2.HTTP配置四、使用简介 1.上传项目到repository 2.下载项目 3.版本管理 a)先更新后提交 b)完成独立功…

联系随笔2---在tomcat服务器上发布servlet应用程序

问题二&#xff1a;在tomcat服务器上发布servlet应用程序 1,new->Dynamic Web Project写工程名字->next->next在Generate web.xml文件上打勾勾->finish. 2&#xff0c;在工程名字上&#xff0c;new->servlet。在create Servlet对话框中填写java package包名字和…

Apache Lucene 5.0.0即将发布!

终于&#xff0c;在一系列强大的4.x功能&#xff08;最近是4.10.2&#xff09;发布之后&#xff0c;我们终于在努力开发另一个主要的Apache Lucene版本&#xff01; 没有确切时间的承诺&#xff08;完成时就完成了&#xff01;&#xff09;&#xff0c;但是我们已经有一个自愿…

从零开始学习前端开发 — 15、CSS3过渡、动画

一、css3过渡 语法&#xff1a; transition: 过渡属性 过渡时间 延迟时间 过渡方式; 1.过渡属性(transition-property) 取值&#xff1a;all 所有发生变化的css属性都添加过渡 eg: transition: all 1s; ident 指定要过渡的css属性列表 eg: transition:border-radius 1s,back…

CentOS6.4 Install FTP

目录 安装参考传输模式遇到无法显示远程文件夹报错安装参考 https://www.cnblogs.com/walblog/articles/7890226.html 传输模式 主动模式被动模式遇到无法显示远程文件夹报错 点击属性设置&#xff1a; 搞定。 转载于:https://www.cnblogs.com/mysticbinary/articles/11271647.…

windowsphone7高级编程中提到的地址

1、综合性技术论坛&#xff0c;包括windowsphone,.net,iphone,android等&#xff0c;网址&#xff1a;http://p2p.wrox.com 2、windowsphone7高级编程作者Nick Randolph发表博客的网站&#xff0c;网址&#xff1a;http://www.christec.co.nz/&#xff0c; 书中代码下载地址&am…

用于单元测试的JUnit教程–最终指南(PDF下载)

编者注&#xff1a; 我们在Java Code Geeks上提供了许多JUnit教程&#xff0c;例如JUnit入门示例 &#xff0c; 使用断言和注释的 JUnit 示例 &#xff0c; JUnit注释示例等。 但是&#xff0c;为了方便读者&#xff0c;我们希望将所有JUnit功能收集在一份详细的指南中。 我们…