【发布时间】:2023-04-07 08:38:01
【问题描述】:
数据模型类
创建一个 IObservableList
- IObservableList observableList = new WritableList();
- Add 方法向 observableList 添加数据
- 返回 observableList 的方法
表格查看器类
- 将内容提供者设置为 ObservableListContentProvider
图形界面类
- 查看器 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)
我不关心选择是否改变 - 只在列表改变时。
【问题讨论】:
-
是的,实现 IListChangeListener 是正确的方法。 updateButtons() 在做什么?
-
@Behnil 检查列表以确保列表中至少有 1 个对象 - 如果没有,我禁用所有按钮,如果有我启用按钮。另请参阅上面的编辑
-
ISelectionChangeListener 有什么问题?在此处发布 updateButtons() 内容。
-
@Behnil 我可能会看到问题,让我测试一下
-
@Behnil 方法 handleListChange(ListChangeEvent arg0) 永远不会被调用。那是因为我没有向表查看器添加侦听器吗?