java - ViewerSupport 和 ITableColorProvider 或 ITableFontProvider

标签 java data-binding eclipse-rcp jface eclipse-databinding

我正在编写一个 RCP 应用程序并尝试使用数据绑定(bind)将 GUI 的控件与模型链接起来。这包括例如将数据绑定(bind)到表格。

据我所知,org.eclipse.jface.databinding.viewers.ViewerSupport 是将模型绑定(bind)到表查看器的推荐方法。然而,这将只允许我将数据作为文本放入表中。我还想更改前景色和背景色以及某些单元格的字体,具体取决于其他可观察值。如果我能以某种方式将 ITableFontProvider 或 ITableColorProvider 放入 ViewerSupport.bind(...) 生成的内容中,我也会很高兴。

到目前为止,我还没有找到一个很好的方法来做到这一点。我可以复制 ViewerSupport.bind() 的内容并用我自己的类覆盖 LabelProvider。这看起来有点乱。

我还可以在调用 ViewerSupport.bind 后检索 LabelProvider 并将其替换为委托(delegate) LabelProvider,它也实现了 ITableFontProvider 和 ITableColorProvider。这让我创建了许多方法,这些方法除了将事情委托(delegate)给另一个对象外什么都不做。也不是很优雅。

所有这些似乎都不太好。知道如何以优雅的方式做到这一点吗?我是否忽略了一些工厂类来做到这一点?

最佳答案

ViewerSupport 仅提供基于各种数据绑定(bind)内容和标签提供程序的简化方法。当 ViewerSupport 没有提供您想要的内容时,直接使用这些内容和标签提供程序是完全可以接受的。

例如,ViewerSupport.bind(StructuredViewer 查看器,IObservableList 输入, IValueProperty[] labelProperties) 只是:

ObservableListContentProvider contentProvider = new ObservableListContentProvider();
if (viewer.getInput() != null)
    viewer.setInput(null);
viewer.setContentProvider(contentProvider);
viewer.setLabelProvider(new ObservableMapLabelProvider(Properties
        .observeEach(contentProvider.getKnownElements(),
                    labelProperties)));
if (input != null)
    viewer.setInput(input);

因此您可以只使用此代码,但将 ObservableMapLabelProvider 的子类与您的字体和颜色提供程序一起使用。

关于java - ViewerSupport 和 ITableColorProvider 或 ITableFontProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25239279/

相关文章:

c# - WPF - 从代码隐藏/附加行为绑定(bind)到显式实现的接口(interface)属性

java - Lombok 进口问题

java - struts 1.3 中默认单选为 yes

java - Java 更新后 Android Eclipse 无法正常工作,我该如何解决?

data-binding - Grails 数据绑定(bind)问题

c# - CompositeCollection + CollectionContainer : Bind CollectionContainer. 集合到用作 DataTemplates DataType 的 ViewModel 的属性

java - Java 和 postgres BigDecimal/numeric 值之间的差异

java - 更改链接小部件的文本颜色

java - E4 Application.class 必要吗?

maven - 如何将构建时间戳添加到使用 Tycho 构建的应用程序的标题中