java - SWT 文本字段设置和 RCP 命令绑定(bind)到键

标签 java swt eclipse-rcp jface

我有 RCP 应用程序,其中有一个命令,它启动某个实体的向导(编辑向导,显示实体的所有字段,用户可以更改它并完成向导以保存该实体)。我正在使用 JFace 数据绑定(bind)将实体的字段绑定(bind)到 swt 文本和组合。

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

然后我需要将此命令绑定(bind)到某个组合键(例如 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”是我在 2 个不同的 View 中绑定(bind)到相同的组合键,它看起来没问题(并在这 2 个 View 中激活不同的命令)。

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

SWT 文本字段不绑定(bind)到实体的整数字段。使用 String 字段一切正常,并且它们绑定(bind)良好。但是整数字段没有(里面只有空白)。

我尝试过的:

  1. 我调试了我的向导和向导页面,所有时间的实体状态都是 很好(它们的 Integer 字段是正确的,不是 0 或 null)

  2. 尝试为 JFace 绑定(bind)编写整数到字符串转换器。没有帮助。

  3. 我尝试禁用此字段的 JFace 绑定(bind),并设置文本字段 值(value)手册:

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

    但这也行不通!看起来这不是 JFace 绑定(bind)问题, 但是 SWT 文本问题?调试这种情况:

    entity.getIntegerField().toString() = "1234"前后 "setText"swtTextField.getText = ""前后"setText"

    (当我不是从组合键命令调用运行此调试时, 一切看起来都不错,并且 swtTextField.getText = "1234"在 "setText"之后)

  4. 尝试将绑定(bind)扩展的上下文更改为默认值 (“org.eclipse.ui.contexts.window”)也没有帮助。

所以,总而言之,当我通过按钮(或上下文菜单)调用我的命令时,一切正常。但是当我通过组合键绑定(bind)扩展调用我的命令时,整数->文本字段(字符串字段工作正常)出现问题。

知道它有什么问题吗?

补充:我发现问题出在组合键上。当组合键包含非英文键符号(Ctrl+非英文键我的语言键符号,导致我们的应用程序使用非英文键组合)时出现问题:SWT Text doesn't accept Integer values。当组合键为英语时 (Ctrl+english-key) - 一切正常。

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

这很奇怪,我还是不明白,为什么那个 hanneps...

最佳答案

几个月前我遇到了这个问题。问题出在 JFace 数据绑定(bind)上。有什么帮助:

  • 使用 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 并像这样绑定(bind)您的 IObservableValue:bindingContext.bindValue(yourTextObserveTextObserveWidget, yourModelTemplateObserveValue, null, null)

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

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

如果您有任何其他问题,请查看数据绑定(bind)的文档。这在我的程序中使用 StringbooleanInteger 类型。不过我还没有测试任何其他东西。

关于java - SWT 文本字段设置和 RCP 命令绑定(bind)到键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10206279/

相关文章:

java - 将 .lnk 文件拖到 Windows 10 任务栏

java - SWT 创建一个关闭的小部件(滚动浏览复合)

java - 如何根据要显示的文本定义 SWT 中文本的长度?

java - 扩展树节点

java - 更新 JPanel 中的 JList

java - Intellij 使用另一个类的数组创建组合框

java - 从 Apple 脚本运行 Java

Java-根据现有对象列表从流中获取新对象列表

eclipse-rcp - 在 Eclipse RCP 中,是否可以同时显示工具栏项的图标和标签?

java - 将 Eclipse 插件项目转换为 Eclipse RCP 应用程序