1

数据模型类

创建一个 IObservableList

  1. IObservableList observableList = new WritableList();
  2. Add 方法将数据添加到 observableList
  3. 返回 observableList 的方法

表查看器类

  1. 将内容提供者设置为 ObservableListContentProvider

图形界面类

  1. 查看器 setInput 从数据模型类中获取 ObservableList

一切似乎都按预期工作,表格查看器随着 ObservableList 的更改而更新。

但我遇到的问题是如何更新 GUI 中的按钮。我有几个按钮可以根据数据模型中 ObservableList 中的对象计数启用和禁用。为了运行该逻辑,我必须知道列表何时发生变化。

我试图在 GUI 类中实现 IListChangeListener。然后添加方法

public void handleListChange(ListChangeEvent arg0) {
  updateButtons();  <-- My method to run the logic

}

这不起作用,我应该实现其他东西而不是 IListChangeListener 吗?

我不确定应该在 GUI 类中实现什么来监听更改?

编辑

我是否必须向查看器添加侦听器?

viewer = new AplotDataTableViewer(parent, SWT.BORDER|SWT.V_SCROLL|SWT.FULL_SELECTION);
viewer.setInput(AplotDataModel.getInstance().getObservableList());
viewer.addListener(etc... )

这是我唯一的选择

 addSelectionChangedListener(ISelectionChangeListener listener)

我不在乎选择改变了——只有当列表改变了。

4

1 回答 1

3

我已经尝试过这个例子,这对我有用:

IObservableList observableList = new WritableList();
observableList.addListChangeListener(new IListChangeListener() {

    @Override
    public void handleListChange(ListChangeEvent event) {
        System.out.println(event.diff);
    }
});
observableList.add("element");
observableList.add("element");
observableList.add("element");

TableViewer viewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL);
viewer.getTable().setHeaderVisible(true);
viewer.getTable().setHeaderVisible(true);
viewer.setContentProvider(new ObservableListContentProvider());

TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
column.getColumn().setText("Column");
column.getColumn().setWidth(200);

column.setLabelProvider(new ColumnLabelProvider());

// Provide the input to the ContentProvider
viewer.setInput(observableList);

现在 IListChangeListener 在应用程序启动时被调用 3 次,然后每次我向 observableList 添加元素时。

于 2012-12-13T20:50:55.910 回答