我正在研究JFace
的Eclipse开发。我制作了一个插件,作为ComboViewer
的虚拟内容提供商。该提供程序实质上将数据模型提供为ArrayList
硬编码值。无论如何,我试图理解这种方法。
我通过ComboViewer
方法在comboViewer.setInput(list)
上设置模型
按下按钮,我调用另一个对象的方法,将list
我传递的input
更新为ComboViewer
(添加另一个元素),然后调用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
的目的是什么?
更新提供给Viewer
的数据的正确方法是什么?
答案 0 :(得分: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
}
});
按下按钮时,组合查看器会更新。