当前位置: 首页 > 知识库问答 >
问题:

允许用户定义键盘快捷键

凌成天
2023-03-14

为了简化JavaFx应用程序的使用,我希望允许用户定义一个键盘组合/快捷键来触发应用程序最重要的操作。

我知道如何在代码中定义KeyCodeCombination并将其设置为加速器或在KeyEvent侦听器中使用它,但我希望允许用户只需在键盘上的某个设置对话框中按下它,就可以定义自己的KeyCodeCombination。

基本上沿着这个伪代码:

// how would I implement the next two lines
Dialog dialog = new KeyboardShortcutDefinitionDialog();
KeyCombination shortcut = dialog.recordKeyboardShortcut();

// I know how to do the rest from here
shortcutLabel.setText(shortcut.toString());
SettingsManager.storeShortcut(shortcut);
Application.setupShortcut(shortcut);

共有1个答案

席烨
2023-03-14

下面是一个监听key_pressed事件并从中构建keysociate的小示例。

import java.util.ArrayList;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.scene.input.KeyCombination.Modifier;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        var label = new Label();
        label.setFont(Font.font("Segoe UI", 15));
        primaryStage.addEventHandler(KeyEvent.KEY_PRESSED, event -> {
            if (!event.getCode().isModifierKey()) {
                label.setText(createCombo(event).getDisplayText());
            }
        });

        primaryStage.setScene(new Scene(new StackPane(label), 500, 300));
        primaryStage.setResizable(false);
        primaryStage.show();
    }

    private KeyCombination createCombo(KeyEvent event) {
        var modifiers = new ArrayList<Modifier>();
        if (event.isControlDown()) {
            modifiers.add(KeyCombination.CONTROL_DOWN);
        }
        if (event.isMetaDown()) {
            modifiers.add(KeyCombination.META_DOWN);
        }
        if (event.isAltDown()) {
            modifiers.add(KeyCombination.ALT_DOWN);
        }
        if (event.isShiftDown()) {
            modifiers.add(KeyCombination.SHIFT_DOWN);
        }
        return new KeyCodeCombination(event.getCode(), modifiers.toArray(Modifier[]::new));
    }

}
 类似资料:
  • 在 Illustrator 中,可以查看所有快捷键的列表,还可以编辑或创建快捷键。键盘快捷键对话框作为快捷键编辑器,包括所有支持快捷键的命令,其中一些未在默认快捷键集中提到。 您可以定义自己的快捷键集,更改快捷键集中的个别快捷键以及在快捷键集之间切换。例如,您可以为从 “窗口 ”>“工作区 ”菜单中选择的不同工作区创建单独的组。 除了使用键盘快捷键外,您还可以使用上下文相关菜单来访问很多命令。上下

  • 可以在 Illustrator 中使用键盘快捷键来提高工作效率。可以使用 Illustrator 中包含的默认快捷键,或添加和自定所需的快捷键。 在 Illustrator 中,可以查看所有快捷键的列表,还可以编辑或创建快捷键。键盘快捷键对话框作为快捷键编辑器,包括所有支持快捷键的命令,其中一些未在默认快捷键集中提到。 您可以定义自己的快捷键集,更改快捷键集中的个别快捷键以及在快捷键集之间切换。例

  • Photoshop 允许您查看所有快捷键的列表,并编辑或创建快捷键。“键盘快捷键”对话框充当一个快捷键编辑器,并包括所有支持快捷键的命令,其中一些是默认快捷键组中没有提到的。 注意:除了使用键盘快捷键之外,您还可以使用与现用工具、选区或面板关联的上下文相关菜单来访问许多命令。要显示上下文相关菜单,请在文档窗口或面板中单击鼠标右键。 定义新的键盘快捷键 执行下列操作之一: 选取“编辑”>“键盘快捷键

  • 主要内容:Windows 和 Mac 的键盘快捷键,基本的快捷键,文本编辑,Web 浏览器,屏幕截图通过使用键盘快捷键可以节省时间。 Windows 和 Mac 的键盘快捷键 在现代操作系统中和计算机软件程序中,键盘快捷键经常被使用。 使用键盘快捷键能帮您节省很多时间。 基本的快捷键 描述 Windows Mac OS 编辑菜单 Alt + E Ctrl + F2 + F 文件菜单 Alt + F Ctrl + F2 + E 视图菜单 Alt + V Ctrl + F2 + V 全选文本 Ctr

  • 配置本地和全局键盘快捷键 本地快捷键 您可以使用Menu模块来配置仅在应用程序集中时才触发的键盘快捷键。为此,在创建MenuItem时务必指定[`accelerator]属性。 1 const {Menu, MenuItem} = require('electron') 2 const menu = new Menu() 3 ​ 4 menu.append(new MenuItem({ 5 lab

  • 配置本地和全局键盘快捷键 Keyboard Shortcuts Configure local and global keyboard shortcuts 本地快捷键 您可以使用 [Menu] 模块来配置快捷键,只有在 app 处于焦点状态时才可以触发快捷键。 为此,在创建 MenuItem时必须指定一个 [accelerator] 属性。 const { Menu, MenuItem } = r