- 博客(28)
- 资源 (3)
- 收藏
- 关注
原创 javabean:boolean和Boolean类型的getter方法名是有区别的
javaBean中,要设置或获取某个property的值,就需要相应的get和set方法,对于primitive和自定义类类型的属性(如:property),getter和setter方法就是getProperty和setProperty(第一个字母变大写,前面再加get或set)。对于类型为 boolean的属性(不是Boolean),getter方法还可以写为isProperty(getProp
2016-12-29 09:31:09 7434
原创 java 8:只取年月日的java.util.Date(时分秒清零)对象
废弃的方法(@Deprecated)如果不想要java.util.Date中的时分秒数据,希望将它清零,只保留年月日,最简单的办法是 调用setHours,setMinutes,setSeconds方法清零。Date now = new Date();now.setHours(0);now.setMinutes(0);now.setSeconds(0);// 输出Date的日期和时间部分
2016-12-28 13:25:57 71159 4
原创 jface databinding:输入无效数值时强制恢复初始值-updateModelToTarget
如下代码显示一个简单的对话框,Text文本框中初始是个浮点数0.5,修改文本框中的内容不符合float数值格式时,左上角会提示出错。点击下面的”恢复初始值”按钮,希望能恢复初始值0.5。 package testwb;import org.eclipse.jface.dialogs.Dialog;import org.eclipse.jface.dialogs.IDialogConstants;
2016-12-27 15:11:16 595
原创 jface databinding: 创建readonly(只读)可观察对象(observable)
java与C++有一点不同:C++有const关键字,使用const关键字,用于指定一个参数、成员变量或函数是只读不可修改的,通过const参数让对象成为readonly的,可以严格禁止外部调用修改对象的内容。而java没有类似的限制,只有一个final指定变量不可以被赋值,但还是可以通过调用变量的方法任意修改变量指向的对象内部状态。也就是说,java没有像C++那样有绝对readonly的限制。
2016-12-27 13:17:54 757
原创 jface databinding: Radio Button group及ISideEffect绑定数据对象的例子
下图左侧是三个Radio button,设计的要求是选择不同的radio button,右侧的三个group会分别有不同的可见状态(visible),并且将radio button状态与数据对象绑定 下面是用SelectObservableValue来实现数据绑定,并在ISideEffect的帮助下完成右边三个组件的可见状态控制。 // 创建SelectObservableValue
2016-12-25 18:25:06 1245
原创 jface databinding:更简单的ISideEffect实现多目标单边数据绑定塈其原理分析
Eclipse 4.6 提供了名为 ISideEffect的数据绑定工具. ISideEffect可以实现当一个或多个观察对象(IObservable)改变时执行特定代码。 ISideEffect很像一个侦听器,但它却不需要开发者像侦听器那样作任何依附对象的动作(addChangeListener/removeChangeListener)。当被监控的观察对象改变时它会自动反应执行指定的代码。
2016-12-25 17:49:15 983 1
原创 jface databinding:构建一个改进版的通用型数值验证器StringToNumberValidator
jface已经提供了基于AbstractStringToNumberValidator的基本类型数值验证器IValidator 但是在项目实际使用中发现这些验证器有缺点:空字符串被视为合法,可以通过验证,而且一般情况下,我们会视空字符串为无效输入数值解析错误时返回的信息为英文而且太详细,用户体验不好。其实如果用户输入了非数字导致解析错误时只要提示输入无效就可以了,没必要太详细,更不能是英文
2016-12-25 11:13:28 672
原创 jface databinding:UpdateValueStrategy(数值更新策略)类详解
在jface databinding(数据绑定框架)中,org.eclipse.core.databinding.UpdateValueStrategy 更新策略类是个比较重要的类,通过了解它可以更容易理解数据绑定的整个框架,起到提纲挈领的作用。 这个类的作用是定义被绑定的源/目标两个可观察值(observable value)之间数据更新、验证、转换的方式。数据更新步骤数据更新步骤分为:
2016-12-24 17:52:34 1063
原创 jface databinding:部分实现POJO对象的监测
在前一篇博文《jface databinding/PojoBindable实现对POJO对象的支持 》中,已经知道直接对POJO对象进行修改,是不能被绑定的UI组件知道的,在上一篇文章中虽然说到PojoBindable这个项目可以解决这个问题,但这个项目并不成熟,所以我没有采用这个方案,而且如果要改造所有的POJO类支持PropertyChangeSupport又实在太麻烦了。 仔细想想我的需求
2016-12-23 14:46:53 992 1
原创 jface databinding/PojoBindable实现对POJO对象的支持
POJO对象无法被监控在jface databinding中,将普通的java bean(有get/set方法但没有通过PropertyChangeSupport实现属性监控)定义为POJO对象。 我们可以对POJO对象通过PojoProperties.value(String propertyName)方法提供IObservableValue实例,但返回的PojoValueProperty实例并
2016-12-22 12:04:55 824 1
原创 jface databinding(数据挷定)中的数据转换(IConverter)和数据验证(IValidator )
前几天在做对话框界面过程中,对行文本框中的输入数值需要进行验证,于是对Text组件做了扩展,做了一个可以验证输入的字符串是否为数值的NumText组件,参见 《java SWT:限制数值输入的Text文本框通用组件》,但是在使用过程中发现,这种方式有缺陷,就是如果用户输入非法的字符,结果就是输不进去,界面上不会有报错也不会有任何提示,用户体验不好。 之前对databinding有过简单的了解,知道
2016-12-22 00:15:19 1398
原创 jface databinding:延迟计算--ComputedValue和WritableList使用的例子
org.eclipse.core.databinding.observable.value.ComputedValue类实现IObservableValue接口,提供对象T的延迟计算特性,它提供了一个抽象方法calculate,实现这个方法就可以实现根据多个可监控对象(IObservableValue)计算更新当前对象的需求。 尼玛,好抽象,我自己都不知道在说什么,还是举个例子吧。 比如我们有一
2016-12-21 15:06:23 832
原创 java:windows下获取当前虚拟机(java.exe)所在路径
Properties java.lang.System.getProperties()的注释中有对”java.home”属性的说明:” Java installation directory “,很简单,就是java安装路径。 如果你要想在运行时获取当前java虚拟机所在的位置,通过System.getProperty(“java.home”)调用并不能获取准确的位置。 比如: eclipse
2016-12-19 16:24:36 6436
原创 java SWT:限制数值输入的Text文本框通用组件
控制Text只能输入数值只能输入数值的原理很简单,就是利用VerifyListener侦听器,响应VerifyEvent 事件,对输入内容进行检查。 具体如何难输入的内容是有效数字,网上有很多文章介绍如何实现,有是检查输入字符是不是0-9,这种方式有局限性,有的是利用正则表达式来判断,写得好复杂。 其实利用Float,Integer,Double这些类的静态方法valeOf(String)就能准
2016-12-18 18:46:26 4929 1
原创 java SWT: addFilter热键监听Ctrl-C不正常的问题
SWT跟有道词典有什么关系?这两个东西有什么关联么? 如果你已经知道它们的关联就不需要看本文了。 下面是用windowbuilder生成的一个简单的java代码,我在代码中用addFilter增加了对Ctrl-C热键的侦听。如果检测到Ctrl-C按下,就输出消息。 实现的情况是: Ctrl-C键的确可以被检测到 但是在程序的界面中按下鼠标左键拖动一段距离再松开,也能检测出Ctrl-C。
2016-12-17 13:05:39 1273 1
原创 java:用CountDownLatch.await替代Object.wait实现线程阻塞/唤醒
线程之间经常需要一定的同步,比如线程A需要线程B的部分运算结果,但又不必等到线程B把所有的结果都算出来,否则A就要太长时间。 下面这个例子就是这个应用场景,主线程需要等待子线程从数据库中加载记录,但是子线程把所有的记录都加载完要花挺长时间。 而实际上,主线程最开始只需要一条记录就可以继续自己的后续动作了。怎么办呢?下面的代码利用传统的Object.wait()/nofity()方法来实现:
2016-12-16 22:42:50 8108 2
原创 java:Observable/Observer模式在SWT环境下UI线程/非UI线程的透明化调用
观察者模式(Observable/Observer)在UI设计方面非常有用,可以通过Observer来实现UI界面的更新,因而可以实现UI层与业务层的分离。 但是我们知道大部分UI框架(比如SWT)都要区分UI线程和非UI线程,如果Observable对象在非UI线程执行notifyObservers操作,而Observer的update方法又涉及UI对象的操作时就会抛出异常。(参见 《SWT的U
2016-12-15 14:44:04 909 1
原创 VisualSVN:允许修改svn提交日志(pre-revpro-change hook)
我们的svn服务器是使用windows平台的VisualSVN Server,有时SVN提交之后,发现忘记写提交说明了,这时需要修改日志信息,然后就报错了:错误提示的意思说Repositories不接受修改日志,需要要创建一个 pre-revpro-change hook才行,问了度娘,搞清楚了。 hook,顾名思义,就是svn在执行一个动作之前调用的用户自己定义代码(用户没有自定义的情况下就使用
2016-12-13 11:12:40 6755 1
原创 java SWT: 重写dispose()和DisposeListener的区别
当需要在Widget被销毁(dispose)的时候执行一些比如释放资源的动作时,有两个途径来执行这些动作: 1. 重写dispose()方法,在dispose中释放资源的动作。 2. 添加DisposeListener,监听SWT.Dispose事件,在Listener中执行释放资源的动作。 应该用哪种方式呢? 答案是方法2,因为虽然都能执行dispose动作,但SWT隐式销毁对象的时候并不
2016-12-10 14:07:55 3047
原创 java SWT:Display.addFilter设置快捷键的例子-切换全屏
以前只知道org.eclipse.swt.widgets.Widget以及子类可以添加Listener。 今天才搞清楚: Display也addListener方法,而且还有优先级更高的addFilter方法: addFilter方法的原文说明: Adds the listener to the collection of listeners who will be notified
2016-12-09 11:25:15 1957
原创 java SWT:基于Composite定制背景透明的浮动图像按钮(image button)
SWT对于图形按钮没有很好的支持,反正我折腾了半天,发现用org.eclipse.swt.widgets.Button是没办法做出好看的图形按按钮的. 于是就参考org.eclipse.ui.forms.widgets.ImageHyperlink自己撸了一个: 效果嘛,参见下图, 请忽略左边的美女: 鼠标不在按钮区域时的未激活状态 鼠标进入按钮区域时的激活状态 下面是完整代码,很
2016-12-06 16:44:28 5939 2
原创 WindowBuilder:Anonymous class creation can not be evaluated.
WindowBuilder的对包含匿名类的java代码支持不太好, protected void createContents() { shell = new Shell(SWT.NO_TRIM | SWT.ON_TOP); shell.setSize(648, 480); shell.setText("标签编译器");
2016-12-05 18:58:51 830
原创 java SWT:用SWTKeySupport方便进行组合键判断(如Ctrl+F11)
SWT下如果判断包含shfit,ctrl,alt的组合键,就要用到KeyEvent的stateMask字段。 关于stateMask的用法,参见我的上一篇博客《java SWT:MouseEvent,KeyEvent中stateMask字段的用法》比如我们要用Ctrl-F11来实现全屏和正常屏幕显示的切换,直接使用stateMask字段判断的代码可以写成这样: /** * 屏幕
2016-12-05 18:44:57 1509
原创 java SWT:MouseEvent,KeyEvent中stateMask字段的用法
SWT中与键盘鼠标等输入设备有关的事件(MouseEvent,KeyEvent,SelectionEvent GestureEvent TouchEvent)都有一个stateMask字段。 这个字段的作用是以二进制掩码(mask)的方式指示当前键盘的修饰符键(modifier keys)和鼠标按钮(button)的按下状态, 这里modifier keys是指alt,ctrl,shift,c
2016-12-04 13:51:47 1964
原创 java SWT:最有效的layout方法Control.requestLayout()
Eclipse SWT最新的版本中org.eclipse.swt.widgets.Control增加了一个新方法requestLayout()用于更高效的处理layout请求 该方法其实只有一行代码:public void requestLayout () { getShell ().layout (new Control[] {this}, SWT.DEFER);}这是SWT当前最高效
2016-12-03 17:20:51 1244
原创 java SWT:TraverseEvent的理解塈添加TraverseListener实现Composite之间TAB键切换焦点
TraverseEvent遍历事件从英文直译的话,org.eclipse.swt.events.TraverseEvent是指widget中组件遍历(切换焦点)动作发生时产生的事件 举例来说,就是当我们使用光标键,TAB/shift-TAB键,PAGE-UP/DOWN等键在按钮(Button)之间切换焦点的时候,就会产生TraverseEvent事件。 关于TraverseEven的原文说明,
2016-12-03 17:05:10 1665
原创 java SWT:自定义布局(Layout)实现组件自动缩放显示
什么是布局(Layout)窗口布局(Layout)其实是指Composite中组件的一种定位原则的实现,当Composite改变大小时,会自动调用Composite初始化时设置的Layout对象来重新调整所有组件的位置。 一般的UI框架都提供了一些默认布局,比如SWT中的FillLayout,GridLayout…如果使用WindowBuilder开发UI,可以在Design界面下看到所有SWT提
2016-12-03 10:35:34 10676
原创 java SWT入门:自定义背景透明且可鼠标拖动改变尺寸和位置的Composite
下面的代码实现了一个透明可移动可改变尺寸的Composite窗体,如下图 鼠标点击窗口获取焦点,在获取焦点时会显示9个锚点用于改变窗口的位置和尺寸。ActiveRectangle.javapackage net.gdface.ui;import org.eclipse.swt.SWT;import org.eclipse.swt.widgets.Composite;import org.
2016-12-01 20:10:37 4029
CMake脚本在ultraedit中的语法高亮支持
2023-06-08
erpcgen-windows-x86_64.zip
2020-09-17
windows下MSVC兼容的dirent.h
2016-03-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人