我有一个 SWT TableViewer当然,它显示 Table 的内容。当我更改表中的内容时,查看器不会自动刷新以显示更改。具体来说,我更改了表中某一列的排序方向,但除非我调用 viewer.refresh()
,否则查看器不会更新。在附加到表的监听器中刷新查看器很容易,但这需要表的监听器了解查看器。该表与其查看器紧密耦合。
在表格不与查看器紧密耦合的情况下让查看器刷新的最佳方式是什么?
最佳答案
我不确定您在 Table
上连接了哪些监听器,而您无法交替在 TableViewer
上连接以将其作为源。例如,您可以在 TableViewer
上 Hook ISelectionChangedListener
,而不是在 Table
上 Hook SelectionListener
。在这种情况下,现在您将获得 TableViewer
作为事件源而不是表。
当然,TableViewer
可能无法正确代理某些事件。在这种情况下,当您创建Table
时,我会在Table
的数据中粘贴对TableViewer
的引用。例如:
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");
}
});
关于java - 当表更改时如何更新 SWT TableViewer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038218/