gpt4 book ai didi

Java如何使用键绑定(bind)拦截窗口上任何位置的组合键

转载 作者:行者123 更新时间:2023-11-30 05:52:05 25 4
gpt4 key购买 nike

我的应用程序将用于小型双引擎飞机。环境“颠簸”,乳头“老鼠”非常难用(即使在衣架里!)。我需要能够至少拦截用户想要执行的所有常用操作的组合键。这些将包括,例如,alt-C 执行校准,alt-R 开始记录数据,alt-X 获取应用正常关闭等

我只在演示类中使用过键绑定(bind),不了解如何在整个窗口中使用它们。我已经在我的 JFrame 的 ContentPane 上放置了 5 个包含其他 JPpanel 和组件的 JPanel。我发现的所有示例都假设某些组件具有焦点,但按 TAB 键 23 次以到达组件是不合理的。

该应用程序将在 LINUX 下运行,可能是 Ubuntu。

最佳答案

在 swing 中,您应该将 KeyStroke 添加到主面板的操作映射:例如,每次按 [F10] 键时,以下代码可让您刷新包含 JPanel 的 JFrame:

public class MainWindow extends JFrame{
JPanel central;

public MainWindow(){
central = new JPanel();
// I assume you define your other 5 panels here
// and add them to the central JPanel.
getContentPane().add(central, BorderLayout.CENTER);
registerRefreshAction();
}

private void registerRefreshAction(){
javax.swing.Action refresh = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ae) {
JFrame frame = (JFrame) getTopLevelAncestor();
frame.setVisible(false);
frame.getContentPane().repaint();
frame.setVisible(true);
}
};
KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0);
central.getActionMap().put("Refresh", refresh);
central.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, "Refresh");
}
}

您应该在构造函数的某个位置调用 registerRefreshAction,如前所示。您提到的其他组件包含在 5 个面板中,不需要显示。它在 Linux 中运行。

关于Java如何使用键绑定(bind)拦截窗口上任何位置的组合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063398/

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