当表更改时如何更新SWT TableViewer?

时间:2012-01-27 18:27:16

标签: java eclipse swt

我有一个SWT TableViewer,当然,它会显示Table的内容。当我更改表格中的内容时,查看器不会自动刷新以显示更改。具体来说,我更改了表中某列的排序方向,但除非我调用viewer.refresh(),否则查看器不会更新。在我附加到表中的监听器中刷新查看器很容易,但这需要表的监听器知道查看器。桌子与观众紧密相连。

什么是在没有桌子与观众紧密结合的情况下让观众刷新的最好方法?

1 个答案:

答案 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");
    }
});