我有一个SWT TableViewer,当然,它会显示Table的内容。当我更改表格中的内容时,查看器不会自动刷新以显示更改。具体来说,我更改了表中某列的排序方向,但除非我调用viewer.refresh()
,否则查看器不会更新。在我附加到表中的监听器中刷新查看器很容易,但这需要表的监听器知道查看器。桌子与观众紧密相连。
什么是在没有桌子与观众紧密结合的情况下让观众刷新的最好方法?
答案 0 :(得分:3)
我不确定你在Table
上与哪些听众完全联系,以至于你无法联系TableViewer
来获取它作为你的来源。例如,您可以在SelectionListener
上挂钩Table
,而不是在ISelectionChangedListener
上挂钩TableViewer
。在这种情况下,现在您将TableViewer
作为事件源而不是表格。
当然,有可能存在TableViewer
未适当代理的事件。在这种情况下,我会在您创建TableViewer
数据时粘贴对Table
的引用。例如:
Table table = new Table(parent, SWT.NONE);
TableViewer tableViewer = new TableViewer(table);
table.setData("tableViewer", tableViewer);
table.addListener(SWT.DISPOSE, new Listener() {
public void handleEvent(Event e)
{
Table table = (Table)e.widget;
TableViewer tableViewer = (TableViewer)table.getData("tableViewer");
}
});