【问题标题】:How to assign Shortcut (Alt+<key>) to SWT button with image?如何将快捷方式(Alt+<key>)分配给带有图像的 SWT 按钮?
【发布时间】:2015-02-24 06:14:25
【问题描述】:

我正在开发一个 RCP 应用程序,我需要将快捷键 (Alt+[key]) 分配给 带图像的 SWT 按钮。 我可以使用“&”字符为带有文本的按钮分配快捷方式, 狐狸 ex: button.setText("&全选");然后 Alt+S 将作为该按钮的快捷方式。

我对此有 2 个问题:

  1. 如何在不使用按键侦听器的情况下将 Alt+[key] 快捷键分配给带有图像(无文本)的 SWT 按钮?

  2. 如何将 Alt+[key] 快捷键分配给带有文本的 SWT 按钮,但该文本中没有快捷键字母,同样不使用按键侦听器。 例如:“UnFix”是按钮上的文字,快捷键应该是 Alt+Q。

我希望在 SWT 中应该有办法做到这一点。

【问题讨论】:

  • 您说的是 RCP,但随后询问了 SWT。 Eclipse 插件有这方面的代码,但它不在 SWT 中。那么这只是 SWT 还是带有插件的 Eclipse RCP?
  • Greg,它带有插件的 Eclipse RCP 应用程序,但我使用 SWT 组件来设计我的用户界面。
  • 对于插件,您通常会使用命令、处理程序和键绑定来设置快捷方式。

标签: button swt shortcut alt


【解决方案1】:

您可以通过在应用作助记符的字母前放置一个 & 符号来选择助记符(如 "&amp;Select All")。

如果控件没有文本或文本中没有出现所需的字母,则需要使用按键事件侦听器。没有办法解决这个问题。

一些应用程序会解决“丢失字母”问题,因为它们会将助记符放在括号中,如下所示:"UnFix (&amp;Q)"。虽然这在技术上可行,但我发现这是一个美学上相当不幸的选择。

使用 unobvious 助记符也存在可用性问题:用户怎么会知道或记住 Alt+Q 的意思是“UnFix”?

【讨论】:

  • 我同意你的观点,用户可能会因为不明显的助记符而面临可用性问题,这就是为什么我也为按钮提供了工具提示以显示快捷方式。我只是想确认为带有图像的按钮分配快捷方式的另一种方式,您的回答解决了它,谢谢您的回复。
  • 我在设置文本时使用“&”为按钮分配了快捷方式,但我无法在按下快捷方式时调用为该按钮编写的操作。如果我也需要为此目的使用 keyEvent 侦听器,那么使用“&”有什么用?
  • 可能不是所有平台都支持助记符。您使用的是什么操作系统或窗口系统?
  • 我使用的是 Windows 7 32 位操作系统。现在我在按钮上添加了 selectionListner 来调用特定的操作。现在按 Alt+ 正在调用在 selectionListner 中编写的操作...
【解决方案2】:

在尝试了很多解决方法之后,我终于能够将快捷键分配给带有图像的 SWT 按钮。

SWT Button.class 使用 getText() 方法来查找助记词,因此覆盖 Button.class 的 getText() 方法并返回助记键即可。 checkSubclass() 方法也应该被重写,否则 swt 的 Subclassing not allowed 错误将会发生。

Button newButton = new Button(parent, SWT.PUSH){
        @Override
        public String getText() {
            return "&N";
        }

        @Override
        protected void checkSubclass() {
            // Do Nothing to avoid Subclassing Not Allowed error.
        }
    };
    newButton.setImage(newButtonImage);

我上面的例子newButton有快捷键Alt+N。

【讨论】:

  • 非常老套和聪明。不确定我是否会推荐这种方法,因为它绕过了 API!
猜你喜欢
  • 2011-11-01
  • 1970-01-01
  • 2018-10-28
  • 2011-01-17
  • 2011-03-15
  • 1970-01-01
  • 2020-08-12
  • 2017-02-10
相关资源
最近更新 更多