gpt4 book ai didi

java - 按键监听器不响应数字键盘数字

转载 作者:行者123 更新时间:2023-11-30 03:54:19 27 4
gpt4 key购买 nike

我正在制作一个监听 ctrl-1 和 ctrl-2 的按键监听器。

我正在为团队做一个测验。如果第 1 队想要回答,则应按 ctrl-1。如果第 2 队想要回答,请按 ctrl-2。

我选择ctrl的原因是因为有2个控制键。因此 2 支球队可以在 1 个键盘上对战。

我希望团队 1 使用左侧控件和 F1-F12 下的数字。第 2 队使用右侧控件和数字键盘上的数字。

我的代码注册了团队 1 的触发器,但没有注册团队 2 的触发器。这是我的代码:

        public void keyPressed(KeyEvent e) {
if((QuizController)getController() != null){
if(e.getKeyCode () == KeyEvent.VK_1){
if((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)
System.out.println("Team 1");
}
if(e.getKeyCode () == KeyEvent.VK_2){
if((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)
System.out.println("Team 2");
}
}

}

编辑:我刚刚使用键绑定(bind)完成了它,给出了同样的问题,这是代码。

AbstractAction team1 = new AbstractAction() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("Team 1");

}
};

AbstractAction team2 = new AbstractAction() {

@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Team 2");

}
};

getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_1, java.awt.event.InputEvent.CTRL_DOWN_MASK),"actionMap1");
getActionMap().put("actionMap1", team1);

getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_2, java.awt.event.InputEvent.CTRL_DOWN_MASK),"actionMap2");
getActionMap().put("actionMap2", team2);

谢谢!

最佳答案

首先,我强烈建议使用 key bindings API .

第二个 KeyEvent.VK_1 与 numpad+1 引发的事件不同,这是由 KeyEvent.VK_NUMPAD1 触发的,它是一个不同的按键事件,只是就像功能键将 KeyEvent.VK_F1 引发到 12 事件一样。

例如...

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class KeyBindingsTest {

public static void main(String[] args) {
new KeyBindingsTest();
}

public KeyBindingsTest() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestPane extends JPanel {

private JLabel state;

public TestPane() {
setLayout(new GridBagLayout());
state = new JLabel("Nothing here");
add(state);

InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_1, KeyEvent.CTRL_DOWN_MASK), "Ctrl+1");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_2, KeyEvent.CTRL_DOWN_MASK), "Ctrl+2");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD1, KeyEvent.CTRL_DOWN_MASK), "Ctrl+1");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD2, KeyEvent.CTRL_DOWN_MASK), "Ctrl+2");

ActionMap am = getActionMap();
am.put("Ctrl+1", new MessageAction("Ctrl+1"));
am.put("Ctrl+2", new MessageAction("Ctrl+2"));
}

@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}

public class MessageAction extends AbstractAction {

private String message;

public MessageAction(String message) {
this.message = message;
}

@Override
public void actionPerformed(ActionEvent e) {
state.setText(message);
}

}

}

}

关于java - 按键监听器不响应数字键盘数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23630886/

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