1

我有 2 个类,一个是数据模型类,另一个是 gui 类。

类数据模型…………

获取用户选择的数据并创建一个数组列表

类gui…………

有一个使用数据模型类中的数组的 tableviewer

我的问题是当用户向数组添加更多数据时,我需要刷新 tableviewer。

我在 gui 类中创建了一个 updateTableViewer 方法。

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

然后我在datamodel类中引用了gui类。

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

这不起作用。即使创建并打开了 gui 类,getViewer() 调用也始终返回 null。

所以我创建了一个布尔值;

Boolean hasViewerBeenCreated = false;

创建 tableviewer 后,我将值设置为 true。

viewer = new AplotDataTableViewer(parent, SWT.BORDER|SWT.V_SCROLL|SWT.FULL_SELECTION);
  viewer.setInput(AplotDataModel.getInstance().getArrayData());
  hasViewerBeenCreated = true;  

然后我创建了一个返回布尔值的方法。

我从 dailog 上的按钮调用该方法。我还替换了数据模型类中的 updateTableViewer 方法调用

if (!dataArrayList.contains(pp)) {
     dataArrayList.add(pp);
  }
  abd.getBooleanValue();
}

这是结果。

我在数据模型类中执行 add 方法 - 它返回 false - 这是有道理的,因为此时尚未创建 dailog

我执行并创建 gui 类我单击按钮并返回 true - 这是有道理的,因为查看器已创建

这是我感到困惑的地方。在 gui 仍然打开的情况下,我可以再次执行 add 方法,它仍然返回一个 false 值。然后我可以单击按钮并查看它的真实值。

我认为当创建 gui 并将布尔值设置为 true 时。我将能够在其他类中获得布尔值的当前值。

我不确定我是否没有正确引用 gui 类,或者在创建 gui 时我没有访问当前线程或 tableviewer?

我不知道这是否是线程问题,或者我只是没有从 gui 正确获取当前值。

这是我现在申请的一个大问题。每当将新数据添加到数组中时,我都必须能够刷新 tableviewer。我不能让用户每次选择新数据时都必须手动刷新表

4

0 回答 0