【问题标题】:Binding SWT List to an ArrayList将 SWT 列表绑定到 ArrayList
【发布时间】:2011-09-02 18:23:07
【问题描述】:

我正在尝试将对象的 ArrayList 绑定到 Java SWT List 小部件。这就是我所拥有的:

    DataBindingContext bindingContext = new DataBindingContext();
    //
    myModel= new WritableList(buses, MyObject.class); 
    IObservableList listWidgetObs = SWTObservables.observeItems(listWidget);
    bindingContext.bindList(listWidgetObs , myModel, null, null);
    //
    return bindingContext;

但不知何故,它似​​乎不起作用。我已经尝试了很长时间,但仍然没有运气。这是我第一次在 Java 中尝试数据绑定。如何将 ArrayList 绑定为 SWT List 小部件的数据提供者,然后将其绑定到 MyObject 类中方法调用 getName() 的值?

谢谢!

【问题讨论】:

  • it doesn't seem to work 是什么意思?是有错误还是数据没有绑定在一起?
  • 什么也没发生。该列表没有显示任何内容。只是一个空列表。
  • 好的,所以不会抛出异常。您确定 ArrayList 包含数据吗?能否提供更大的代码示例?

标签: java data-binding swt


【解决方案1】:

根据您的示例,模型列表 (myModel) 似乎包含 MyObject 类型的对象。但这是错误的,因为 SWT List 的内容列表必须是字符串。

你有(至少)三个选择:

  • 列表中的对象必须是String 类型,因此您必须在创建可观察列表时转换对象,或者
  • 您必须在bindingList(...) 中提供UpdateListStrategy,或者
  • 您使用ListViewer 绑定LabelProvider

选择取决于myModel的对象是否可以动态变化。

我通常尽可能选择第二个选项,因为我尽量不混合数据绑定和 JFace,除非真的非常需要。替代方案有时会得到一些相当丑陋的通知/侦听器链......

【讨论】:

  • 我也使用了 UpdateListStrategy 方法,但是由于某种原因,Target->Model 策略不起作用!有任何想法吗?模型->目标工作得很好。我使用 SWTObservables.observeItems(list)。
  • 抱歉,这里没有简单的答案。我需要研究代码看看有什么问题。
  • 您能否确认这一点:当使用 SWTObservables.observeItems() 观察到的 SWT LIST 发生变化(元素 ADD/REMOVE 等)时,targetToModelConverter 应该触发,对吗?
  • 嗯.. 我不确定您将如何将元素添加到 SWT 列表中。我没有检查,但我认为绑定到 List.items 只是一种方式。
  • 是的......它是......这种方法不走运。我用 SWTObservables.observeSingleSelectionIndex 和 Integer->List (Target->Model) 转换器解决了这个问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-03-15
  • 2013-09-29
  • 2010-12-24
  • 2011-09-19
  • 2018-04-20
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
相关资源
最近更新 更多