gpt4 book ai didi

java - 在 JFace 查看器中反射(reflect)数据更改的正确方法

转载 作者:行者123 更新时间:2023-11-30 04:41:47 26 4
gpt4 key购买 nike

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

我通过 comboViewer.setInput(list) 方法在 ComboViewer 上设置模型。
按下按钮时,我调用另一个对象的方法,该方法更新我作为输入传递给ComboViewerlist(添加另一个元素),然后我调用comboViewer.refresh来反射(reflect)更改,但没有任何反应。

事实证明:

我需要使用更新后的列表调用 comboViewer.setInput(list) 以查看 UI 组合中数据的更改(即之前添加的内容)。我发现,只有当我获取作为输入对象传递的comboViewer并对其进行修改时,comboViewer.refresh才会反射(reflect)任何更新。 IE。如果我这样做:

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

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

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

最佳答案

反射(reflect)更改的正确方法是调用refresh列表

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
}

});

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

关于java - 在 JFace 查看器中反射(reflect)数据更改的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12132473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com