我有2个类,一个类是datamodel类,另一个类是gui类。
class datamodel .........
获取用户选择的数据并创建一个arraylist
class gui .........
有一个tableviewer正在使用datamodel类中的数组
我的问题是,当用户向阵列添加更多数据时,我需要刷新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上的一个按钮调用该方法。 我还替换了datamodel类中的updateTableViewer方法调用
if (!dataArrayList.contains(pp)) {
dataArrayList.add(pp);
}
abd.getBooleanValue();
}
以下是结果。
我在datamodel类中执行add方法 - 它返回false - 这是有道理的,因为此时尚未创建dailog
我执行并创建了gui类 我点击按钮,它返回true - 这是有道理的,因为已经创建了查看器
这是我感到困惑的地方。 在gui仍然打开的情况下,我可以再次执行add方法,它仍会返回false值。然后我可以单击按钮,看它是真正的价值。
我认为当创建gui并将boolean值设置为true时。我可以在其他类中获取布尔值的当前值。
我不确定我是否没有正确引用gui类或者创建gui时我没有访问当前的线程或tableviewer?
我不知道这是一个线程问题,还是我没有正确地从gui获取当前值。
这是我的应用程序现在的一个大问题。每当新数据添加到阵列时,我都必须能够刷新tableviewer。每次选择新数据时,我都不能让用户手动刷新表