gpt4 book ai didi

java - 更新 Eclipse RCP 项目中零件中的 TableView 的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 02:44:53 25 4
gpt4 key购买 nike

假设我有一个ItemListPart在我的 RCP 项目中,有一个表要显示在其中,如下所示:

import java.util.List;

import javax.annotation.PostConstruct;

import org.eclipse.e4.ui.di.Focus;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

public class ItemListPart {
private Table table;

@PostConstruct
public void createControls(Composite parent){
//I wish the ItemList could be changed from outside the ItemListPart class.
List<Item> ItemList = getItemList();

parent.setLayout(new GridLayout(2, false));

table = new Table(parent, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
table.setLinesVisible(true);
table.setHeaderVisible(true);
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.heightHint = 200;
table.setLayoutData(data);

String[] titles = { "Item Name", "Description"};
for (int i = 0; i < titles.length; i++) {
TableColumn column = new TableColumn(table, SWT.NONE);
column.setText(titles[i]);
table.getColumn(i).pack();
}


for(Item it:ItemList){
TableItem item = new TableItem(table, SWT.NONE);
item.setText(0, it.getName());
item.setText(1, it.getDesc());
}

for (int i=0; i<titles.length; i++) {
table.getColumn (i).pack ();
}
}

@Focus
public void onFocus() {
table.setFocus();
}
}

这里是ItemList<Item>是一个我希望可以从 ItemListPart 外部更改的列表类,并且每当 ItemList<Item> 中的数据更改后, TableView 可以根据更新的数据自动刷新。实现这一目标的正确方法是什么?谢谢。

最佳答案

没有一种“正确”的方法。

一种方法是使用事件代理并让您的 View 部分监听更新列表的代码中的事件。

在更新列表的代码中发布事件:

@Inject
IEventBroker eventBroker;

...

eventBroker.post("/list/updated", Collections.EMPTY_MAP);

在您的 View 中监听更新事件:

@Inject
@Optional
public void listUpdated(@UIEventTopic("/list/updated") Event event)
{
// TODO handle the update
}

注意:事件org.osgi.service.event.Event

您可能会发现使用 TableViewer 比使用 Table 更容易,因为单独的内容提供程序可以更轻松地更新表格以进行内容更改。

您还可以使用以下方法在事件中传递数据:

MyClass myClass = ....

eventBroker.post("/list/updated", myClass);


@Inject
@Optional
public void listUpdated(@UIEventTopic("/list/updated") MyClass myClass)

还有一些有关事件代理的更多信息 here

关于java - 更新 Eclipse RCP 项目中零件中的 TableView 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40481424/

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