当前位置: 首页 > 面试题库 >

Java KeyListener与键绑定

黎阳冰
2023-03-14
问题内容

我试图写一个计算器,有一个问题。我已经为所有按钮制作了动作监听器,现在我希望可以从键盘输入数据。我是否需要对KeyListener或Keybinding进行全部操作,还是有其他方法可以使单击按钮后将其发送到actionhtml" target="_blank">listener中的说明?还有更好的方法:Keylistener或Keybinding


问题答案:

一般而言,在您的键输入集有限的情况下,键绑定是一个更好的选择。

KeyListener遭受与可聚焦性有关的问题以及GUI中的其他控件的困扰,焦点将一直不断地离开组件(带有KeyListener)。

一个简单的解决方案是使用Actions
API
。这使您可以定义一个独立的“动作”,该动作ActionListener既可以用作,又可以携带可用于配置其他UI组件(尤其是按钮)的配置信息。

例如…

采取NumberAction可以代表任何数字的通用名称(现在将其限制为0-9)…

public class NumberAction extends AbstractAction {

    private int number;

    public NumberAction(int number) {
        putValue(NAME, String.valueOf(number));
    }

    public int getNumber() {
        return number;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        int value = getNumber();
        // Do something with the number...
    }

}

你可以做类似…

// Create the action...
NumberAction number1Action = new NumberAction(1);
// Create the button for number 1...
JButton number1Button = new JButton(number1Action);

InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
// Create a key mapping for number 1...
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_1, 0), "number1");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD1, 0), "number1");

ActionMap am = getActionMap();
// Make the input key to the action...
am.put("number1", number1Action);

完成了…

您还可以为NumberAction相同的编号创建任意数量的实例,这意味着您可以分别配置UI和绑定,但是知道在触发时,它们将执行相同的代码逻辑,例如…



 类似资料:
  • 问题内容: 我需要绑定所有箭头键以执行相同的功能,但是每次获取按下哪个键时。目前我只有通过以下方式按下向右箭头键时才有 但是我需要这样的东西 问题答案: 您要问的实际上是违反直觉的,并且违背了键绑定API的设计。 目的是为每个按键提供单个工作单元。在我看来,这建议您应为每个箭头键分别执行操作。 它使您更容易遵循逻辑,进行更改,根据需要规避操作。 但是我是谁呢? 如果看不到它,一种简单的方法就是为每

  • 问题内容: 我想在我的应用程序中的任何位置(Control + S)触发保存操作。我已经添加了必要的键绑定,并且该操作将按预期触发。但是,如果我在JTable上尝试Control + S,则该表将启动我的自定义操作并激活该表单元格以进行编辑。我想我已经在表格的输入映射中禁用了编辑操作。我在这里想念什么? 问题答案: 像@Guillaume一样,我运行您的代码没问题。您可能会在这里讨论过无意中失败的

  • 按键绑定 你可以激活keyBindings选项来支持键盘控制。默认情况下iScroll监听方向键,上下翻页建,home/end键,但这些按键绑定完全可以自定义。 你可以通过传递一个包含按键代码列表的对象来进行按键绑定。 默认的按键值如下: keyBindings: { pageUp: 33, pageDown: 34, end: 35, home: 36,

  • 前面我们已经向您介绍了键绑定 map! <M-j> <Down> 尖括号及其中的内容,为 Vim 配置文件的约定,分别描述了按键和功能,表示将功能编写到按键上。如果绑定的只是普通字符,例如: map! xxx XXXXX 表示将 XXXXX 绑定到 xxx 上。当您键入 xxx 时,编辑器会自动替换为 XXXXX 如果您只是想将字符串绑定为缩写,方便输入,我们建议您使用 iabbrev 来绑定。例

  • 问题内容: 我正在尝试在JPanel上的Java中进行键绑定。我希望在按下“ w”按钮时执行某些操作。我遵循Java教程进行绑定,但是actionPerformed方法不执行(即,没有文本打印出来)。以下是我的测试GUI的全部代码,并突出显示了相关部分: 永远不会打印文本“ test”。我已经尝试了很多次,使用了许多不同的变体,不同的键,并且确保面板聚焦,但没有运气。我究竟做错了什么? 问题答案:

  • Keygrabber keygrabber 的工作方式和 bbkeys(也是一个非常棒的工具, 但功能上有其局限性,过去采用了不兼容的许可证)非常相似,但配置文件采用了全新的语法,所具有 的一些新功能甚至让 Fluxbox 变得更加强大。 其中之一就是,新的 keygrabber 支持类似于 emacs 中的 keychains... 也就是说您可以用:Mod1 + M + Mod1 + F 切换