-1

我有一个TitleAreaDialogwith a TableViewer,它允许用户从表中选择一行。问题是,表格的内容可能会随着时间而改变。我想实现浏览器中常见的刷新行为(例如,通过按下F5表的内容应该刷新)。

下面是一个屏幕截图,希望能让场景更清晰一些:

看起来这个问题有一个可能的解决方案,但我认为它存在缺陷有几个原因:

  • 侦听器未正确分离(例如,如果我重新打开对话框,我的 . 上有两个过滤器Display
  • 从架构的角度来看,它不会将侦听器添加到我认为它所属TitleAreaDialog的地方。Widget
  • 我想避免手动连接/分离监听器(例如,监听器应该与TitleAreaDialog.

长话短说:在不使用上述问题中描述的过滤器机制的情况下,将 a 添加KeyListener到 a TitleAreaDialog(或 一般而言)的正确方法是什么?Dialog

我知道这个问题在SSCCE部门有些失败,但任何指向正确方向的指针都受到高度赞赏。

与 TableViewer 的对话框

4

1 回答 1

1

添加一个Listenerfor 关键事件是一件棘手的事情。您希望在Listener包含Control的 s 都没有焦点时触发它,并且即使 s 的子项具有焦点也希望它触发Dialog

这个问题基本上有两种解决方案:

  1. 显而易见的选择:addFilterDialog创建removeFilter对话框和关闭对话框时使用(在 中close())。
  2. 创建一个ListenerforSWT.KeyUp并将其添加Dialog. 这是独立于焦点控制触发事件所必需的。

我更喜欢解决方案 1,因为它不那么混乱,而且 SWT 会处理所有事情(好吧,除了添加和删除过滤器)。向所有子控件添加 aListener并不是您真正应该做的事情,但它也可以完成这项工作。


如果您不想每次都添加和删除过滤器,请创建一个子类DialogTitleAreaDialog执行一次,然后通过再次子类化来重用它。

如果添加和删除过滤器一般来说太麻烦了,那么恐怕没有更简单的解决方案。

于 2014-03-10T11:33:14.657 回答