我的应用程序将用于小型双引擎飞机。环境“颠簸”,乳头“鼠标”非常难以使用(即使在衣架中!)。我需要能够拦截用户想要采取的至少所有常用操作的组合键。例如,这些将包括执行校准的 alt-C , alt-R 以开始记录数据, alt-X 以包含app优雅地关闭等等。
我只在演示类中使用了键绑定,并且不了解如何在整个窗口中使用它们。我在我的JFrame的ContentPane上放了5个包含其他JPPnels和组件的JPanel。我发现的所有示例都假设某些组件具有焦点,但推动TAB 23次以获取组件是不合理的。
该应用程序将在LINUX下运行,可能是Ubuntu。
答案 0 :(得分:4)
在摇摆中你应该在主面板的动作贴图中添加一个KeyStroke:例如,下面的代码让你刷新包含JPanel的JFrame,每次按[F10]键:
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中运行。
答案 1 :(得分:2)
你可以尝试
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
或
getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
我可能会在自定义内容窗格
上建立此功能JPanel myContentPane = new JPanel();
frame.setContentPane(myContentPane);
或使用根窗格的输入地图
如果这不起作用,还有另一种方法,但我更愿意看看这是否有效