当前位置: 首页 > 知识库问答 >
问题:

SWT文本字段设置和RCP命令绑定到键

葛航
2023-03-14

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

该命令具有处理程序(包含向导调用),并且此处理程序绑定到某个按钮,并且所有按钮都可以正常工作。

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

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

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

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

SWT文本字段不会绑定到实体的整数字段。对于字符串字段来说,这一切都没问题,它们绑定得很好。但是整型字段没有(里面只有空白)。

我尝试过的:

>

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

    已尝试将整数写入字符串转换器以进行 JFace 绑定。没有帮助。

    我尝试禁用此字段的JFace绑定,并手动设置文本字段值:

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

    但这也没用!看起来这不是JFace绑定问题,而是SWT文本问题?在这种情况下调试:

    entity.getIntegerField()。toString() = "1234 "在" setText "之前和之后

    (当我不是从键组合命令调用运行这个调试时,一切看起来都很好,“setText”后面是swtTextField.getText=“1234”)

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

    所以,总而言之,当我通过按钮(或上下文菜单)调用命令时,一切都很好。但Integer有一个问题-

    有什么想法吗?

    补充:我发现,问题出在组合键上。当组合键包含非英语键符号(Ctrl non-english-key my language键符号,因为我们的应用程序使用非英语组合键)时,问题就出现了:SWT文本不接受整数值。当组合键是英文(Ctrl english-key)时,一切正常。

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

    这很奇怪,我还是不明白,为什么那个汉纳普斯…

  • 共有1个答案

    易成天
    2023-03-14

    几个月前我碰到了这个问题。问题出在JFace数据绑定上。帮助:

    • 使用org.eclipse.core.databinding.observe.value。IObservableValue用于观察您的文本。因此,您可以这样编写代码:IObservableValue yourTextObserveTextObserverWidget=SWTObservaables。observeText(yourText,SWT.Modify)
    • 使用org.eclipse.core.databinding.beans。BeansObservables以观察实体的值,这样您就可以编写如下代码:。observeValue(您的模型,“yourInt”)
    • 使用org.eclipse.core.databinding。DataBindingContext并像这样绑定您的IObservableValuebindingContext。bindValue(您的TextObserveTextObserverWidget,您的ModelTemplateObservateValue,null,null)

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

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

    如果您有任何其他问题,请检查数据绑定的留档。这在我的程序中使用Stringboolean整数类型。不过,我还没有测试其他任何东西。

     类似资料:
    • 我正在尝试在SWT窗口中制作一个大的白色框来显示信息。我希望它看起来与标签不同,但我也希望它不可编辑。 到目前为止,我只能创建一个灰色背面(顶部)的中午可编辑输入框。我的目标是使用(在下)获得的外观。 (< code>List的问题是它只能在每个列表项的一行上显示文本。我可能需要显示一段文字)。

    • 问题内容: 我有一个用netbeans开发的应用程序,我想在显示面板时将焦点设置为一定。我已经阅读了许多文章,并尝试了各种方法,但没有奏效。主要问题之一是在哪里放置所需的代码,我认为在我的情况下是 有一些指示使用Window Listener的帖子,但是随着netbeans生成GUI,我无法看到如何实现接口,因为我无法编辑创建jPANEL等的代码。整个过程非常令人沮丧,我真的没有相信这应该很困难。

    • 我有一个下拉列表,由选择元素初始化。 如何创建mvvm绑定到选定的数据文本字段? 我没有数据源。 我必须绑定到选定的文本。例如:和 更新

    • 问题内容: 抱歉,如果这是一个基本问题: 我一直在尝试按照此处的教程在笔记本电脑上设置Python 。在 PIP下,VIRTUALENV + VIRTUALENVWRAPPER 副标题表示 现在设置virtualenvwrapper: 2 $ export MSYS_HOME=/c/msys/1.0 3 $ source /usr/local/bin/virtualenvwrapper.sh 上面

    • 如何在JavaFX中设置的宽度? 我试过这个: 但我看不到任何变化。

    • 如何设置组件的焦点? 我已经尝试了上述代码,但不起作用:(