侦听WritableList中的更改

时间:2012-12-12 17:20:00

标签: java swt listener

数据模型类

创建IObservableList

  1. IObservableList observableList = new WritableList();
  2. 添加方法以向observableList添加数据
  3. 返回observableList的方法
  4. 表格查看器类

    1. 将内容提供商设置为ObservableListContentProvider
    2. GUI类

      1. Viewer setInput从数据模型类
      2. 获取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)
        

        我不关心选择是否已更改 - 仅当列表已更改时才会更改。

1 个答案:

答案 0 :(得分: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在应用程序启动时被调用三次,然后每次我向observableList添加一个元素。