SWT表,TableViewer,数据更改刷新表

时间:2012-08-28 18:38:25

标签: java swt

我不太需要一些指导性的帮助。我已经能够完成并开始使用Tables和TableViewers的代码示例。但我没有找到任何示例来帮助我进行粒子设置。

请指导我正确的方向。

我的课程:

AHandler.java - 这允许用户从鼠标右键单击中选择数据。在执行期间,我调用单例类将用户选择的数据添加到arraylist。

ASelectedData.getInstance().add(tcRevision, selectedDataset);

ASelectedData.java - 是一个单例类,用户选择被添加到ArrayList中。

ABase.java - 此对话框打开,单击菜单。该对话框应显示一个包含ArrayList值的表。一些按钮可以执行其他操作。

我现在的方式是在ABase.java类中创建表和tableviewer。我正在从表格中提取信息。

 viewer.setContentProvider(new ArrayContentProvider());
 viewer.setInput(AplotSelectedDataTable.getInstance().getArrayData());

这将使用正确的数据填充表格。

但是ABase.java类是MODELESS。那么为什么该对话框打开,用户可以使用鼠标右键继续选择数据并添加到arraylist。但是我对表格编码的方式我必须重新打开窗口来更新数据。

*编辑 * *** 在我的主GUI中,我创建了一个TableViewer。 TableViewer创建一个表,该表显示来自单独类中的arraylist的数据。问题是用户仍然可以转到主应用程序GUI(而不是我的应用程序GUI),并在我的GUI仍处于打开状态时选择更多数据。他们希望看到新数据在选择时添加到表中。

问题是我无法告诉表新数据已经到达所以刷新表。获取数据并将其添加到ArrayList的Add方法位于ASelectedData类中。不是创建tableviewer的类。

执行Add方法时,我需要一种方法告诉表刷新。问题是表和方法分为两个单独的类。

希望这更有意义

修改*

我使用TableViewer的主GUI

public AplotBaseDialog(Shell shell, TCSession theSession) Constructor

//////////////////////////////////////////////////////////////////////////
//                         createTableViewer()                          //
//////////////////////////////////////////////////////////////////////////
private TableViewer createTableViewer(Composite parent) {
   viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
   createColumns(parent, viewer);
   Table table = viewer.getTable();
   table.setHeaderVisible(true);
   table.setLinesVisible(true);

   viewer.setContentProvider(new ArrayContentProvider());
   viewer.setInput(AplotSelectedDataTable.getInstance().getArrayData());

   // Layout the viewer
   GridData gridData = new GridData();
   gridData.verticalAlignment = GridData.FILL;
   gridData.horizontalSpan = 2;
   gridData.grabExcessHorizontalSpace = true;
   gridData.grabExcessVerticalSpace = true;
   gridData.horizontalAlignment = GridData.FILL;
   viewer.getControl().setLayoutData(gridData);
   return viewer;
 }

//////////////////////////////////////////////////////////////////////////
//                            updateTableViewer()                       //
//////////////////////////////////////////////////////////////////////////
public void updateTableViewer() {
   viewer.refresh();
}  

将代码添加到其他类

  AplotBaseDialog abd = new AplotBaseDialog(null, null);

  public void add(TCComponentItemRevision tcRevision, TCComponentDataset selectedDataset) {
   AplotDatasetData pp = new AplotDatasetData(tcRevision, selectedDataset);
   if (!dataArrayList.contains(pp)) {
      dataArrayList.add(pp);

   }
   abd.updateTableViewer();
  }// end add()

2 个答案:

答案 0 :(得分:3)

虽然您的问题尚未完成,但我会尝试猜测您的问题: 您在TableViewer中有一个Dialog,您可以从主GUI编辑ModelProvider。现在您想知道如何更新表,当您向模型添加内容时,这是正确的吗?

如果是这样,您可以在对话框中提供一个方法,该方法可以更新对话框中的TableViewer。像这样:

public void updateTableViewer()
{
    if(viewer != null)
        viewer.refresh();
}

当您向ModelProvider添加内容时,可以从主gui调用此方法。

如果这不是您的问题,请更新您的原始帖子。

答案 1 :(得分:0)

在create control中添加这一串代码,这可能对你有帮助

ResourcesPlugin.getWorkspace()。addResourceChangeListener(new IResourceChangeListener(){

    @Override
    public void resourceChanged(IResourceChangeEvent event) {
        treeViewer.refresh();
    }
});