这里就可以使用JFace了,它是对SWT的封装,可以应用于复杂的数据类型。 ; 8 import org.eclipse.jface.viewers.LabelProvider; 9 import org.eclipse.jface.viewers.ListViewer ; 10 import org.eclipse.jface.viewers.SelectionChangedEvent; 11 import org.eclipse.jface.viewers.Viewer ; 6 import org.eclipse.jface.viewers.TableViewer; 7 import org.eclipse.jface.viewers.Viewer; 8 ; 4 import org.eclipse.jface.text.TextPresentation; 5 import org.eclipse.jface.text.TextViewer; 6
https://blog.csdn.net/10km/article/details/53839050 在前一篇博文《jface databinding/PojoBindable实现对POJO return this; } } 测试代码: TestPojoBinding4.java package testwb; import org.eclipse.jface.dialogs.Dialog ; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.jface.databinding.swt.WidgetProperties org.eclipse.swt.widgets.Display; import org.eclipse.core.databinding.observable.Realm; import org.eclipse.jface.databinding.swt.DisplayRealm
jface为List,Set,Map三种类型提供了对应的三种可写对象WritableList,WritableSet,WritableMap,研究了这三个类的代码,发现它们99%是满足这个需求,然并卵, 没有对toWrap做任何处理就传给了父类的构造函数,这才是我想要的 super(realm, toWrap, elementType); } 所以这虽然是一个很普遍的需求,但jface 好在jface的基础框架比较扎实,所以如果搞清楚jface的类继承结构,自己写代码也不复杂,所以我为List,Set,Map三种类型的分别写了三个类用于实现Observable封装(WrappedObservableList
https://blog.csdn.net/10km/article/details/53811946 POJO对象无法被监控 在jface databinding中,将普通的java package testwb; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants package testwb; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants 有,解决方案就是本文的标题jface databinding/PojoBindable。 /PojoBindable#With_Pojo_Bindable 参考资料 《JFace Data Binding/PojoBindable》 《AJFace Data Binding - Tutorial
因为jface databinding本身的现实需求,jface 数据绑定技术中提供了对Observable对象的影子对象的创建方法。 return unmodifiableStatusProviders; } 从下面的类型层次结构图中可以看到,对于Map,Set,List以及普通的ObservableValue对象,jface
org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.core.databinding.observable.value.ComputedValue; import org.eclipse.jface.databinding.swt.DisplayRealm org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.core.databinding.observable.value.ComputedValue; import org.eclipse.jface.databinding.swt.DisplayRealm org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.core.databinding.observable.value.ComputedValue; import org.eclipse.jface.databinding.swt.DisplayRealm
https://blog.csdn.net/10km/article/details/53857624 在jface databinding(数据绑定框架)中,org.eclipse.core.databinding.UpdateValueStrategy 关于验证器和转换器的使用参见我之前的博客 《jface databinding(数据挷定)中的数据转换(IConverter)和数据验证(IValidator )》 数据转换 数据转换器(IConverter
package testwb; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.jface.databinding.swt.WidgetProperties org.eclipse.swt.widgets.Display; import org.eclipse.core.databinding.observable.Realm; import org.eclipse.jface.databinding.fieldassist.ControlDecorationSupport ; import org.eclipse.jface.databinding.swt.DisplayRealm; import org.eclipse.swt.widgets.Button; import 难道jface有bug?
; 6 import org.eclipse.jface.text.Document; 7 import org.eclipse.jface.text.IDocument; 8 import ; 14 import org.eclipse.jface.text.rules.IPredicateRule; 15 import org.eclipse.jface.text.rules.IRule ; 22 import org.eclipse.jface.text.rules.SingleLineRule; 23 import org.eclipse.jface.text.rules.Token ; 8 import org.eclipse.jface.resource.StringConverter; 9 import org.eclipse.jface.text.TextAttribute ; 10 import org.eclipse.jface.text.rules.IToken; 11 import org.eclipse.jface.text.rules.Token; 12 import
(Window.java:820) at org.eclipse.jface.window.Window.open(Window.java:796) at org.pentaho.di.ui.xul.KettleDialog.show $100(JfaceMenuitem.java:43) at org.pentaho.ui.xul.jface.tags.JfaceMenuitem$1.run(JfaceMenuitem.java:106 ) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection (ActionContributionItem.java:545) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java :490) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:402
上一篇博文《jface databinding:可多选的widget List组件selection项目与java.util.List对象的双向数据绑定》讲述了如何实现List组件的多选项与List数据绑定的问题 要实现这个需求,用jface提供的JFace Viewers实现数据绑定非常方便,JFace Viewers为Table,Tree等复杂组件提供了一个方便的开发框架,如下图对于每一种复杂组件都有对应的Viewer ; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import ; import org.eclipse.jface.databinding.viewers.ObservableSetContentProvider; import org.eclipse.jface.databinding.viewers.ViewerProperties , observableSet)); }); return bindingContext; } } 参考资料: 《Data Binding for JFace
发现自己设计的NumText组件用户体验存在问题后,才下决心对jface databinding做深入的了解。 ,尼玛,这jface databinding本是要简化代码设计的,要是需要写更多更复杂代码,还不累死人呀。 jface databinding提供了两个基本的接口用于数据类型转换和数据验证 分别是IConverter和IValidator。 TestBinding.java package testwb; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants 事实上jface databinding可以实现双向数据同步。 参考资料: 《AJFace Data Binding - Tutorial》 《JFace Data Binding》
1.找到jFace并用WinRAR打开之: jFace的具体位置:Eclipse目录/plugins/org.eclipse.jface_3.7.0.I20110522-1430.jar,找到后,用WinRAR 2.找到并修改字体属性: 打开后,依次展开:/org/eclipse/jface/resources,这里,你将看到不同操作系统的字体设置,比如jfacefonts_hp_ux,properties里保存了 找到Windows7/Vista的字体设置,双击,随便用一个文本编译器打开,找到org.eclipse.jface.textfont.0的配置项,将其设置成CourierNew-regular即可,后面还可以设置字号
因为安装WindowBuilder时是不包含SWT/JFace待第三库的JavaDoc的(SWing是JDK自带的,有源码支持),导致开发过程中要了解相关的类的说明就比较麻烦。 如果要在eclipse中加入对SWT/JFace等第三库的JavaDoc和源码支持,有两个解决办法。 方法一:在线JavaDoc 以JFace为例, 如下图,鼠标右键点击你的项目属性,找到Java构建路径,找到org.eclipse.jface.xxxx.jar包,对JavaDoc位置点编辑, ? 但是eclipse并没有单独为SWT/JFace这些库提供单独的JavaDoc文档下载链接,不过解决的办法总是有的。 Eclipse SDK是eclipse旗下的一个project也是eclipse的基础构件,Eclipse SDK提供了完整的eclipse的所有文档和源(不仅限于SWT/JFace)。
在jface viewer中label provider用于提供数据对象到视图对象(viewer)显示内容的数据映射关系。 ; import org.eclipse.jface.databinding.viewers.ViewerSupport; import org.eclipse.jface.dialogs.Dialog ; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.widgets.Composite; import ; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.dialogs.Dialog ; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableViewer;
1.依次点击 window –> show view –>other> 找到plug-ins 找到插件org.eclipse.jface.text(每个”.”都是按首字母排序的,大概是右边箭头这个位置 ,选择import as–> Source Project, 导入完成后,在你的workspace(eclipse左边)就可以看到这个project了 2.修改代码 打开org.eclipse.jface.text /org/eclipse/jface/text/contentassist/CompletionProposalPopup.java文件 找到下面的代码(ctrl+F快捷查) char[] triggers 把修改好的org.eclipse.jface.text导出 右键点击你的workspace里的org.eclipse.jface.text, 选择export–>Deployable plug-ins
实现Observable对象 我们知道,org.eclipse.jface.databinding.swt.WidgetProperties工厂类的items()方法中为CCombo、Combo、List 参见 org.eclipse.jface.internal.databinding.swt.ListItemsProperty的源码 public class ListItemsProperty extends ; import org.eclipse.jface.internal.databinding.swt.WidgetListener; import org.eclipse.swt.SWT; import ; import org.eclipse.jface.databinding.swt.ISWTObservableList; import org.eclipse.jface.dialogs.Dialog 在jface.internal包下,也就是非公开的包,所以这个类的接口稳定性并没有保证,版本升级的时候有可能会被改变或删除。
// 将SelectObservableValue 的value与数据对象type绑定 // observablesourceConfig对象类型参见本文附参考资料中的《jface ; break; } }); 关于ISideEffect的介绍参见我上一篇博客《jface databinding:更简单的ISideEffect实现多目标单边数据绑定塈其原理分析》 参考资料: 《Binding values of a radio button group》 《jface
版本的eclipse可以按照这种方法找到对应jar包的源码进行修改,其他版本的eclipse不支持修改 只能使用别人修改好的jar包 我这里有4.6.2版本的eclipse对应的org.eclipse.jface.text 使用方法: 下载org.eclipse.jface.text_3.11.2.v20161113-1700.jar 包 然后打开eclipse安装目录,搜索org.eclipse.jface.text,找到你原来 eclipse的org.eclipse.jface.text包 然后替换即可。 这个jar包适合各种eclipse版本,你只需要把下载好的org.eclipse.jface.text_3.11.2.v20161113-1700.jar 包的名字重命名为你eclipse源文件里面对应 org.eclipse.jface.text包的名字(版本号),然后进行替换即可,亲测可用正常使用!
this.date, this.date = date); } ISideEffect 在这个场景中,是两个widget组件的状态绑定到一个数据对象的属性 实现上面的需求,参考我之前的博文《jface 我们知道ComputedValue也可以实现单向的多对一数组绑定, 关于ComputedValue,我在另一篇博文中有更详细的介绍《jface databinding:延迟计算–ComputedValue java.beans.PropertyChangeSupport; import java.util.Calendar; import java.util.Date; import org.eclipse.jface.dialogs.Dialog ; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite ; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.core.databinding.beans.BeanProperties