加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – SWT文本字段设置和绑定到密钥的RCP命令

发布时间:2020-12-15 02:33:24 所属栏目:Java 来源:网络整理
导读:我有RCP应用程序,我有一个命令,它启动一个实体的向导(编辑向导,显示实体的所有字段,用户可以更改它并完成向导以保存此实体).我正在使用JFace数据绑定将实体的字段绑定到swt Texts和Combos. 该命令具有处理程序(包含向导调用),并且此处理程序绑定到某个按钮,
我有RCP应用程序,我有一个命令,它启动一个实体的向导(编辑向导,显示实体的所有字段,用户可以更改它并完成向导以保存此实体).我正在使用JFace数据绑定将实体的字段绑定到swt Texts和Combos.

该命令具有处理程序(包含向导调用),并且此处理程序绑定到某个按钮,并且一切正常.

然后我需要将此命令绑定到某个组合键(例如Ctrl E).我正在使用org.eclipse.ui.bindings扩展:

<key
commandId="com.project.command"
contextId="com.project.view.context"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
sequence="M1+E">
</key>

“com.project.view.context”是由我在两个不同的视图中绑定到相同的组合键,它看起来没问题(并在这两个视图中激活不同的命令).

但是当我通过这个组合键打开我的向导时,有一个问题:

SWT文本字段不绑定到实体的整数字段.使用String字段,一切正常,它们的绑定很好.但是Integer字段不是(它里面只有空格).

我尝试过的:

>我调试了我的向导和向导页面,并且所有时间实体状态都是
罚款(他们的整数字段是正确的,不是0或null)
>尝试将整数写入字符串转换器以进行JFace绑定.没有帮助.
>我尝试禁用此字段的JFace绑定,并设置文本字段
价值手册:

swtTextField.setText(entity.getIntegerField().toString());

但这也没有用!看起来这不是JFace绑定问题,
但是SWT文本有问题吗? Debuggin这种情况:

entity.getIntegerField().toString()=“1234”之前和之后
“setText”之前和之后的“setText”swtTextField.getText =“”

(当我从Key组合命令调用运行此调试时,
一切看起来不错,并且“setText”之后的swtTextField.getText =“1234”
>尝试将绑定扩展的上下文更改为默认值
(“org.eclipse.ui.contexts.window”)也没有帮助.

所以,总结一下,当我通过按钮(或上下文菜单)调用我的命令时,一切正常.但是当我通过键组合绑定扩展调用我的命令时,Integer-> Text字段(String字段工作正常)存在问题.

有什么想法吗?

补充:我发现问题是关键组合.当组合键包含非英语键符号(Ctrl非英语键我的语言键符号,导致我们的应用程序使用非英语键组合)时,问题出现:SWT Text不接受整数值.当组合键是英语(Ctrl english-key)时 – 一切正常.

所有其他命令(没有SWT文本字段)也可以正常工作,它们也被绑定到Ctrl非英语键组合……

这很奇怪,我仍然不明白,为什么那个hanneps ……

解决方法

几个月前我遇到了这个问题.问题出在JFace Data Bindings上.有什么帮助:

>使用org.eclipse.core.databinding.observable.value.IObservableValue观察文本.所以你可以编写如下代码:IObservableValue yourTextObserveTextObserveWidget = SWTObservables.observeText(yourText,SWT.Modify);
>使用org.eclipse.core.databinding.beans.BeansObservables来观察实体的值,这样就可以编写如下代码:BeansObservables.observeValue(yourModel,“yourInt”);
>使用org.eclipse.core.databinding.DataBindingContext并绑定您的IObservableValue,如下所示:bindingContext.bindValue(yourTextObserveTextObserveWidget,yourModelTemplateObserveValue,null,null)

因此,将模型绑定到Text的最终代码将如下所示:

DataBindingContext bindingContext = new DataBindingContext();
IObservableValue yourTextObserveTextObserveWidget = SWTObservables.observeText(yourText,SWT.Modify);
IObservableValue yourModelTemplateObserveValue = BeansObservables.observeValue(yourModel,"yourInt");
bindingContext.bindValue(yourTextObserveWidget,null);

如果您有任何其他问题,请查看数据绑定的文档.这在我的程序中使用String,boolean和Integer类型.我没有测试过任何其他的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读