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

标签 java eclipse swt

我有一个 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/

相关文章:

java - 在将 swt 中的组的可见性设置为 false 后如何重新布局 swt 中的对话框

java - 静态变量是否位于堆上的永久生成空间上

java - 如何抑制特定目录或文件(例如生成的代码)的 Java 警告

java - 不同存储库中源代码和测试代码的代码覆盖率生成

java - 如何在我的移动消息 Android 应用程序中添加滑动抽屉?

java - 在通话期间停止重复闹钟

java - 如何在 SWT 中触发自定义事件?

java - 在不处理显示器(父级)的情况下处理外壳

java - Hibernate 说 database.table 不存在

java - 传递参数