gpt4 book ai didi

Java:JPanel 不拾取键盘绑定(bind)

转载 作者:行者123 更新时间:2023-11-29 03:45:45 25 4
gpt4 key购买 nike

问题

我一直在努力使键绑定(bind)在我编写的应用程序中正常工作。

以前,我一直在使用以下变体; panel.registerKeyboardAction(this, "createNewFood", KeyStroke.getKeyStroke(KeyEvent.VK_I, KeyEvent.CTRL_DOWN_MASK), JComponent.WHEN_IN_FOCUSED_WINDOW);

但是因为我在文档中读到 registerKeyboardAction 被标记为已弃用,所以我尝试切换到首选方法,它是这样的; panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("control I"), new NewFoodAction());

不幸的是,这似乎不起作用。

我尝试过的

我在网上搜索过,尝试过很多不同的方法,但均未成功;

  • 我没有将 key 绑定(bind)到面板,而是尝试将其附加到 getRootPane() 的结果。没用。
  • 我已经尝试了所有不同的“条件”; WHEN_IN_FOCUSED_WINDOWWHEN_ANCESTOR_OF_FOCUSED_COMPONENTWHEN_FOCUSED,无效。
  • 我尝试设置 panel.setFocusable(true);没用。
  • 我尝试使用 panel.requestFocusInWindow() 只是为了看看它是否可以有条件地工作;没用。

如果我将键绑定(bind)附加到另一个组件,例如 JTextField,那么它会按预期工作。

一些其他可能相关的信息(但我真的不这么认为);

  • 我正在为面板使用 MigLayout。不要认为这会影响任何事情,但谁知道呢。
  • 我有其他键绑定(bind)(即绑定(bind)到其他组件的其他击键)

下面是一些示例代码:

public FoodFrame() {
super("MealTrack");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(1400, 600));
setLocation(300, 100);
setVisible(true);

panel = new JPanel(new MigLayout("fill", "[grow][]", "[][][][grow][][]"));
add(panel);
panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("control I"), new NewFoodAction());

pack();
filter.requestFocusInWindow();
}

private class NewFoodAction extends AbstractAction {

@Override
public void actionPerformed(ActionEvent e) {
System.out.println("called");
}

}

有人知道问题出在哪里吗?

最佳答案

你做错了。 您需要同时使用 ActionMap 和 InputMap。你应该这样做:

panel.getInputMap(con).put(KeyStroke.getKeyStroke("control I"), "createNewFood");
panel.getActionMap().put("createNewFood", new NewFoodAction());

关于Java:JPanel 不拾取键盘绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11003206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com