【问题标题】:Proper way to reflect data changes in JFace viewers在 JFace 查看器中反映数据更改的正确方法
【发布时间】:2012-08-26 17:50:20
【问题描述】:

我正在研究 JFace 进行 Eclipse 开发。我制作了一个插件来充当ComboViewer虚拟 内容提供者。此提供程序本质上将数据模型提供为硬编码值的ArrayList。无论如何,我试图理解这种方法。

我通过comboViewer.setInput(list) 方法在ComboViewer 上设置模型。
在按下按钮时,我调用另一个对象的方法,将我作为input 传递的list 更新为ComboViewer(添加另一个元素),我调用comboViewer.refresh 以反映更改,但没有任何反应。

结果:

我需要调用comboViewer.setInput(list) 更新列表来查看我的 UI 组合中数据的变化(即之前的添加)。我发现comboViewer.refresh 仅在我获得comboViewer 作为输入Object 传递并对其进行修改时才反映任何更新。 IE。如果我这样做:

List<SomeObject> data = ((List<SomeObject>)(comboViewer.getInput()));  
data.add(new SomeObject("aaa","cccc"));  
comboViewer.refresh();    

只有这样才能刷新数据。但我不明白使用这些 API 的正确方法是什么。
我是否应该获得保留并修改我在setInput 方法中传递的对象?感觉我不应该这样做。那么refresh的目的是什么?

更新提供给Viewers 的数据的正确方法是什么?

【问题讨论】:

  • 这是什么list?没有setInput,所有更新都很好。
  • list 是具有硬编码值的自定义对象列表,这些值用作comboViewer 的数据。不确定您的意思All are updates fine without setInput.
  • 好的,我会给你一些工作代码。

标签: java eclipse swt rcp jface


【解决方案1】:

反映更改的正确方法是致电refreshlist

String[] values = {"1","2","3"};
List<String> list = new ArrayList<String>(Arrays.asList(values));

创建组件

final ComboViewer comboViewer = new ComboViewer(shell, SWT.DROP_DOWN);
comboViewer.setLabelProvider(new LabelProvider());
comboViewer.setContentProvider(new ArrayContentProvider());
comboViewer.setInput(list);
Button button1 = new Button(shell, SWT.PUSH);
button1.setText("Button 5");
button1.addSelectionListener(new SelectionListener(){

  @Override
  public void widgetSelected(SelectionEvent e) {
     // TODO Auto-generated method stub
     System.out.println("Button 5");
     list.add("4");
     comboViewer.refresh();             
  }

  @Override
  public void widgetDefaultSelected(SelectionEvent e) {
     // TODO Auto-generated method stub     
  }

});

当您按下按钮时,组合查看器会更新。

【讨论】:

  • 所以你的意思是我们可以share列表与Viewer?并且列表上的更新直接反映?所以这里并发没有问题?
  • 不是直接的,而是当你打电话给refresh时。只要组件只读取数据,它就可以同时使用。
  • 最后一个问题。我是JFaces的初学者。更新UI的推荐方法是什么?像这样或通过我读为数据绑定的东西?我想看看我接下来应该学习什么
  • 数据绑定只是简化了视图,最好在源代码中学习,从IStructuredContentProvider开始。网站上有很多 sn-ps。
  • 我问的是这样我就不会走错路。所以,如果我开始制作东西而不使用数据绑定,它不会被认为是坏事吗?我正在尝试找出最佳实践和建议来适应我的学习步骤
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 2016-12-15
相关资源
最近更新 更多