当前位置: 首页 > 知识库问答 >
问题:

在Eclipse RCP项目中更新部件中的表视图的正确方法是什么?

厉成仁
2023-03-14

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

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();
    }
}

这里是项目列表

共有1个答案

邓光赫
2023-03-14

没有一个'正确'的方法。

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

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

@Inject
IEventBroker eventBroker;

...

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

在您的视图中,聆听更新事件:

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

注:事件是组织。奥斯基。服务事件事件

您可能会发现使用TableViewer比使用Table更容易,因为单独的内容提供者可以更容易地更新表中的内容更改。

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

MyClass myClass = ....

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


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

这里有更多关于活动经纪人的信息

 类似资料:
  • 我创建了一个元素列表,我想更新其中一个列表元素 这是对update方法的调用: 这是更新方法: 在该方法中,我收到警告“从方法生成函数”,并建议“方法‘update\elem’可能是‘static’” 更新列表元素而不收到警告的正确方法是什么?

  • 问题内容: 在有关如何在ipython笔记本中(一个单元内)在循环中动态更新绘图的答案中,给出了一个示例,说明了如何在Python循环内在Jupyter笔记本中动态更新绘图。但是,这可以通过在每次迭代中销毁并重新创建绘图来实现,并且其中一个线程中的注释指出,可以使用新颖的魔术来改善这种情况,该魔术提供了嵌入在笔记本中的交互式图形,而不是比静态图片 但是,就我所知,这个奇妙的新功能似乎完全没有记载,

  • 我试图做的是创建一个产品列表,并在产品进入时持续显示它。为此,我使用键(区分产品)。从React文档中,我们知道: “键”是创建元素列表时需要包含的特殊字符串属性。 我有一个显示产品的表格,每个产品都有一个ID、一个描述、一个价格和一个数量(列表上此类产品的数量)。每次将新产品添加到列表中时,它必须在最后一个显示的产品之后显示该产品,但是,如果该产品已在列表中,它必须更改对象数据以显示新值。例子:

  • 我有Maven应用程序,具有3个不同的配置文件,如下所示 我有这样的Maven结构: src/main/config/default/WEB-INF/WEB。xml src/main/config/dev/WEB-INF/WEB。xml src/main/config/test/WEB-INF/web.xml src/main/config/prod/WEB-INF/web.xml src/mai

  • 问题内容: 许多Java jar中包含的manifest.mf包含类似于电子邮件标题的标题。参见示例[*] 我想要一些可以将这种格式解析为键值对的东西: 我已经在Google上搜索了“ parse manifest.mf”,“ manifest.mf格式”等内容,并且发现了很多有关标头含义的信息(例如,在OSGI包,标准Java jar等中),但是那不是什么我在找。 看一些示例manifest.m

  • 问题内容: 我是redux和es6语法的新手。我使用官方的redux教程和此示例制作了我的应用。 以下是JS代码段。我的观点-在post reducer中定义REQUEST_POST_BODY和RECEIVE_POST_BODY案例。主要困难- 在商店中查找和更新合适的对象。 我尝试使用示例中的代码: 但是它使用了简单的帖子数组。无需按ID查找正确的帖子。 这是我的代码: 问题答案: 如果您想坚持