java - 将 KeyListener 添加到 TitleAreaDialog

标签 java swt jface keylistener titleareadialog

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

下面是一个屏幕截图,希望可以使场景更加清晰:

看起来this question中有一个可能的解决方案,但我认为它存在缺陷,原因如下:

  • 监听器未正确分离(例如,如果我重新打开对话框,我的显示屏上就会有两个过滤器)
  • 它不会将监听器添加到 TitleAreaDialogWidget 中,我认为从架构的角度来看它属于这些位置。
  • 我希望避免手动监听器附加/分离(例如监听器应与 TitleAreaDialog 一起处置)

长话短说:KeyListener 添加到 TitleAreaDialog (或 Dialog)的正确方法是什么?一般来说),而不使用aforementioned question中描述的过滤机制。 ?

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

Dialog with TableViewer

最佳答案

为关键事件添加一个监听器是一件棘手的事情。您希望在所包含的 Control 没有焦点时触发 Listener,并且即使是 Dialog 的子级也希望它触发有焦点。

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

  1. 显而易见的选择:在创建Dialog时使用addFilter,在关闭对话框时使用removeFilter(在close()中) )。
  2. SWT.KeyUp 创建一个 Listener 并将其添加到 Dialog所有子级中。这对于独立于焦点控件触发事件是必要的。

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

<小时/>

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

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

关于java - 将 KeyListener 添加到 TitleAreaDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22298407/

相关文章:

java - 使用命令行运行程序和配置文件

java - 如何在选项卡文件夹的第二个选项卡上插入圆圈,如何访问第二个选项卡

java - 如何将标签和文本左对齐

java - 如何获取 swt.table 中的总行数

java - JFace 消息对话框 : inline text coloring

java - Eclipse RCP 中的许多查看器、一个或多个内容提供者/域模型

java - 是否有供非开发人员(翻译人员!)编辑资源包的工具?

Java字符串解析和通过MIDI合成器播放错误

java - 从 Main 方法重新运行 Main 方法

java - 使用 SWT 更改文本时标签被切断