键盘快捷键
快捷键允许您为组件分配键盘快捷组合键,以改善终端用户体验。您可以使用已有的快捷键,创建自己的自定义快捷键,并配置快捷键被触发后的响应。
快捷键组合包括一个主要按键,以及零到四个键修饰符(即 Alt, Ctrl, Meta, Shift)。
添加Click快捷键
Click快捷键用于为实现[interfacename]ClickNotifier 接口的组件定义点击操作的替代方式。您可以使用[methodname]addClickShortcut() 方法添加一个Click快捷键。
以下示例使用 addClickShortcut() 方法为 Button 组件添加一个点击快捷键:
Source code
Java
TextField userName = new TextField("User name");
PasswordField password = new PasswordField("Password");
Button login = new Button("Login");
login.addClickListener(event -> this.login());
login.addClickShortcut(Key.ENTER);用户可以通过按下Enter键,而无需点击按钮,即可执行按钮点击所触发的操作。
添加Focus快捷键
Focus快捷键用于将焦点放置到一个实现了`Focusable`接口的组件上,例如输入框。您可以使用 addFocusShortcut() 方法添加一个Focus快捷键。
以下示例使用 addFocusShortcut() 方法为 TextField 添加了一个Focus快捷键:
Source code
Java
TextField textField = new TextField("Label");
textField.addFocusShortcut(Key.KEY_F, KeyModifier.ALT);用户可以使用Alt+F 键盘快捷键将焦点放到`Label`文本框上。
添加自定义快捷键
您可以使用 addShortcutListener() 方法添加一个快捷键,当快捷键被触发时执行自定义代码。
例如:您有一个自定义方法:public void openCustomerCreation(),用户调用该方法后可以打开一个输入表单以便输入新客户信息。
以下示例使用 addShortcutListener() 方法增加自定义快捷键,以执行[methodname]`openCustomerCreation()`方法:
Source code
Java
UI.getCurrent().addShortcutListener(
this::openCustomerCreation, Key.KEY_N,
KeyModifier.CONTROL, KeyModifier.ALT);当用户按下Ctrl+Alt+N,表单即被打开,然后用户可输入新的客户信息。
您可以配置快捷键运行任何遵循 Command 函数接口的代码。该接口有一个名为 execute() 的方法,不接受任何参数。
该示例使用 addShortcutListener() 方法来显示一个通知:
Source code
Java
UI.getCurrent().addShortcutListener(
() -> Notification.show("Shortcut triggered"),
Key.SPACE);|
Note
| 所有添加快捷键的方法都返回一个[classname]`ShortcutRegistration`实例,该实例提供了一种流畅的API以便进一步配置您的快捷键。 |
配置快捷键生效范围
默认情况下,快捷键被注册到全局范围。这意味着只要用户按下正确的键,无论光标所处位置或屏幕上哪个元素获得焦点,快捷键都会被触发。
您可以使用由流式API[classname]ShortcutRegistration 提供的 addShortcutListener() 方法配置快捷键的可用性(例如仅当用户聚焦在特定元素上时)。
以下示例使用 addShortcutListener() 方法定义监听器绑定的组件:
Source code
Java
public class Scope extends Div {
public Scope() {
TextField firstName = new TextField();
TextField lastName = new TextField();
add(firstName, lastName);
Command command = () -> {
firstName.setValue("");
lastName.setValue("");
firstName.focus();
};
// 第一个参数是快捷键的生命周期所属组件,稍后详细介绍。
Shortcuts.addShortcutListener(this,
command, Key.ESCAPE)
// 定义快捷键监听器绑定的组件:
.listenOn(this);
}
}快捷键被绑定到了输入组件的父组件(Scope)。若用户在任何`TextField`输入内容后按Esc键,两输入框会被清空,焦点返回到第一个字段。当同一操作需在同一作用域内所有字段配置快捷键时,这一功能会很有用,而超出外部组件后则不会触发。
快捷键是通过工厂类[classname]`Shortcuts`创建的,该类提供了创建快捷键最通用的方法。更多信息请见下方快捷键生命周期所属组件小节。
移除快捷键
您可以使用 Registration.remove() 方法移除已注册的快捷键。用于添加快捷键的方法均返回[classname]`Registration`或[classname]`ShortcutRegistration`实例。
以下示例使用 Registration.remove() 方法移除快捷键:
Source code
Java
TextField textField = new TextField("Label");
ShortcutRegistration registration =
textField.addFocusShortcut(Key.KEY_F,
KeyModifier.ALT);
// 此处发生一些操作
registration.remove(); // 快捷键已移除快捷键生命周期所属组件
快捷键的生命周期由关联的`Component`控制,该组件称为`lifecycleOwner`。当作为`lifecycleOwner`的组件处于_attached_ (附加到布局中)及_visible_(可见)状态时,此快捷键即为活动状态。若不同时满足这些条件,快捷键则不会被触发。
对于Focus及Click类型快捷键,其生命周期所属组件为快捷键绑定的组件本身。显然,只有当按钮或输入框同时处于布局中且可见时,该快捷键才应生效。
通过`UI`注册的快捷键,其生命周期所属组件为`UI`本身,意味着只有快捷键被移除时才会停止运行。
您也可以通过[methodname]`Shortcuts.addShortcutListener(…)`方法创建绑定到具体组件生命周期的快捷键。
绑定快捷键的生命周期到`Paragraph`组件,使用 Shortcuts.addShortcutListener(…) 方法如下所示:
Source code
Java
Paragraph paragraph =
new Paragraph("When you see me, try Alt+G!");
Shortcuts.addShortcutListener(paragraph,
() -> Notification.show("Well done!"),
Key.KEY_G, KeyModifier.ALT);
add(paragraph);快捷键Alt+G仅当`paragraph`被附加到布局且可见时才生效。
您也可以使用 bindLifecycleTo() 方法重新配置快捷键的`lifecycleOwner`组件:
Source code
Java
Grid<User> usersList = new Grid<>();
Button newUserButton = new Button("Add user", event -> {
});
newUserButton.addClickShortcut(Key.KEY_N, KeyModifier.CONTROL)
.bindLifecycleTo(usersList);只在`usersList` 被附加并处于可见时,快捷键才有效。