2

我正在研究JFaceEclipse 开发。我制作了一个插件来充当ComboViewer. 该提供程序本质上将数据模型提供ArrayList为硬编码值。无论如何,我试图理解这种方法。

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

结果是:

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

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

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

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

4

1 回答 1

2

反映更改的正确方法是调用refresh. 这list

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     
  }

});

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

于 2012-08-26T19:42:06.307 回答