java - 监听 WritableList 中的变化

标签 java swt listener

数据模型类

创建一个 IObservableList

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

表格查看器类

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

图形界面类

  1. Viewer 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)

我不关心选择的变化 - 只有当列表发生变化时。

最佳答案

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

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 被调用三次,然后每次我将一个元素添加到 observableList。

关于java - 监听 WritableList 中的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845160/

相关文章:

java - 如何对 Set 进行分片?

java - 向 JTable 中的每个单元格添加额外的不可见信息

android - 添加 snapshotListener 时禁用第一个查询快照

java - 如何用java中的接口(interface)覆盖方法

java - java中的并行处理框架

java - 单击按钮更改该组合的内容后如何重绘 swt 组合

java - SWT - asyncExec 将输出定向到列表小部件

java - OS X 上的 SWT : menu without window

java - 拥有 Collection Listener 的好方法?

Java多按钮坐标