gpt4 book ai didi

java - 如何使用键盘快捷键的按键事件调度程序

转载 作者:行者123 更新时间:2023-12-02 02:49:42 25 4
gpt4 key购买 nike

我想使用 jframe 或 jdialog 中的快捷键访问组件(例如:这里我使用 Ctrl+N 访问 jframe 的新按钮),因此我能够使用按键事件调度程序来完成我的任务,但事物 当按下快捷键时,相关的按键事件会递归触发,我该如何阻止它?我该如何处理一次?这是我的代码。

public void FocuseComponent(JComponent component) {

KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {

switch (e.getID()) {
case KeyEvent.KEY_PRESSED:
if (e.getKeyCode() == e.VK_N) {
component.requestFocusInWindow();
}
break;

case KeyEvent.KEY_RELEASED:

break;

case KeyEvent.KEY_TYPED:
break;

}

return false;

}

});

}

}

最佳答案

以下是如何为窗口注册全局键绑定(bind)的示例:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class TestKeyHandling {

private static final String CTRL_N_KEY = "nKey";
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
final JFrame frm = new JFrame("Test");
Action act = new AbstractAction() {

@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frm, "Ctrl + N pressed!");
}
};
frm.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("control N"), CTRL_N_KEY);
frm.getRootPane().getActionMap().put(CTRL_N_KEY, act);
frm.add(new JTextField(20), BorderLayout.NORTH);
frm.add(new JTextField(20), BorderLayout.SOUTH);
frm.pack();
frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frm.setLocationRelativeTo(null);
frm.setVisible(true);
}
});
}
}

关于java - 如何使用键盘快捷键的按键事件调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44049493/

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