Java 如何为键盘快捷键使用键事件调度器
我想使用jframe或jdialog中的快捷键访问组件(例如:这里我使用Ctrl+N访问jframe的新按钮),所以我可以使用key event dispatcher执行任务,但事实并非如此 当按下short键时,相关键事件递归触发,我如何才能停止?我怎么能做到这一次呢?这是我的密码Java 如何为键盘快捷键使用键事件调度器,java,swing,Java,Swing,我想使用jframe或jdialog中的快捷键访问组件(例如:这里我使用Ctrl+N访问jframe的新按钮),所以我可以使用key event dispatcher执行任务,但事实并非如此 当按下short键时,相关键事件递归触发,我如何才能停止?我怎么能做到这一次呢?这是我的密码 public void FocuseComponent(JComponent component) { KeyboardFocusManager.getCurrentKeyboardFocusManage
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;
}
});
}
}下面是一个如何为窗口注册密钥绑定全局的示例:
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);
}
});
}
}
以下是如何为窗口注册密钥绑定全局的示例:
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);
}
});
}
}
“…相关关键事件隐居开火”
——你说“隐居”不是英语单词是什么意思?发生了什么事?1)为了更快地获得更好的帮助,发布一个or。2) 对于Swing,我们通常使用。3) 请对代码和代码片段、结构化文档(如HTML/XML或输入/输出)使用代码格式。为此,请选择文本并单击邮件发布/编辑表单顶部的{}
按钮。为什么不为您感兴趣的密钥附加密钥绑定?@andrewhompson:true.)最好说这个词在上下文中没有意义。对不起,它不是隐居的,它应该是正确的,因为它递归地“…相关的关键事件隐居地开火”
——你说“隐居”不是英语单词是什么意思?发生了什么事?1)为了更快地获得更好的帮助,发布一个or。2) 对于Swing,我们通常使用。3) 请对代码和代码片段、结构化文档(如HTML/XML或输入/输出)使用代码格式。为此,请选择文本并单击邮件发布/编辑表单顶部的{}
按钮。为什么不为您感兴趣的密钥附加密钥绑定?@andrewhompson:true.)最好说这个词在上下文中没有意义。对不起,它不是隐秘的,它应该是正确的