Tag: 键绑定

检测在java 7中按下的键

我正在尝试按键绑定a和d键以使角色左右移动,但只有在按下按键时才会执行一次操作。 如何修改此代码以使其在按下或关闭时执行事件? p.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_W, 0),”up”); p.getActionMap().put(“up”, new UpAction()); p.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0), “left”); p.getActionMap().put(“left”, new LeftAction()); p.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0), “right”); p.getActionMap().put(“right”, new RightAction()); p.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),”quit”); p.getActionMap().put(“quit”, new StopAction());

Java Swing:在按下键时执行某些操作

我使用KeyAdpater来获取事件和方法addKeyListener并且工作正常。 问题是当按下键时,动作只发生一次,而不是在被按下时, 在按住键的3-4秒后 ,动作始终发生,这就是我想要的。 我想知道是否有好的方法可以一直按下按键,而不是在按住3-4秒之后。 我想到了下一个解决方案,但也许已经有了实现的方法: public abstract class MyKeyAdapter extends KeyAdapter{ private boolean isPressed = false; private int pressedKey = 0; Thread t = new Thread(new Runnable() { @Override public void run() { while(isPressed) keyPressedAction(pressedKey); } }); @Override public void keyPressed(KeyEvent e) { if(!isPressed){ pressedKey = e.getKeyCode(); t.start(); } } @Override public void keyReleased(KeyEvent […]

PhpStorm未知keyCode:0x0

当我尝试使用像Ctrl-C,Ctrl-V等默认键盘映射时,它们无法正常工作。 当我尝试映射自定义键映射时,按下字符键会出错: Unknown keyCode: 0x0 它可以是什么? 我试着安装Java 1.6,1.7,同样的事情。 PS:使用Fedora 19 编辑 我的默认语言是英语。 但是使用XFCE的键盘设置使其工作正常。 键盘布局问题..谢谢

Java Swing:使用相应的键盘按钮时显示按下的按钮

我正在使用Swing创建一个Java程序,其中包含一个包含箭头键的GUI。 箭头键对应键盘上的箭头键。 当我按下键盘上的向上箭头键时,我希望GUI上的向上箭头键显示为按下。 在我释放箭头键之前,它应该显示它仍然被按下,并且在释放时它也应该释放。 到目前为止我的代码片段(仅针对Up按钮),我认为在按下类别的节目中是完全错误的: … if (e.getKeyCode() == KeyEvent.VK_UP) { actionArrowUp(); JButton buttonUp = (JButton) mainTab.getComponent(4); buttonUp.setSelected(true); } … @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_UP) actionArrowUpRelease(); buttonUp.setSelected(true);

键盘Actionlistener

我试图让我的游戏中的太空飞船(PlayerShip.gif)在按下相应的键时向左,向右,向上和向下移动。 我知道我需要一个keyboardListener,但我有问题弄清楚它到底去了什么以及它实际上是如何实现的。 我的代码如下。 public class GamePanel extends JPanel implements KeyListener { Timer timer1; Timer timer2; ArrayList ship; int x; int y; double speed; int size; int shipxCoord; int shipyCoord; int shipHeight; int shipWidth; int shipRise; int shipRun; boolean left = false; boolean right = false; boolean up = false; boolean down = false; Image enemyShip1; […]

使用Java中的键绑定和动作映射来获取按钮的快捷键

我正在制作一个程序,我希望在我的程序中有所有按钮的快捷方式。 例子ctrl + a执行按钮1。 我还希望这些快捷方式可由用户更改 所以这是我用来添加密钥绑定的代码 InputMap IM = component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); IM.put(KeyStroke.getKeyStroke(KeyEvent.VK_B, InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK), “BUTTON ONE ID”); ActionMap actionMap = component.getActionMap(); actionMap.put(“BUTTON ONE ID”, new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { actionListener.actionPerformed(e); } }); 现在因为我希望这些是用户可更改的,我希望能够使用第三行的“BUTTON ONE ID”来获取其信息。 我希望能够知道我为它输入了什么键,以及是否需要按住ctrl或alt作为快捷方式 所以我想要以下代码 if(“BUTTON ONE ID”){ //print KeyEvent/keyCode info and if we need to hold ctrl, alt […]

全屏窗口不会使用KeyListener或KeyBoardFocusManager获取键盘输入

让我的KeyBoardFocusManger与我的全屏Window一起工作时遇到问题。 无论如何,它只是不会得到键盘输入。 我使用System.exit(0)和println()来查找对keypressed / release / typed方法的任何调用,但不会抛出任何错误。 我试过KeyListeners ; 但在我读完之后,我改为使用KeyboardFocusManager ,同样的事情仍然发生。 我真的很绝望; 从我可以判断, Window没有得到键盘的焦点? 这是我的主要内容: public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { // Determine if full-screen mode is supported directly GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice gs = ge.getDefaultScreenDevice(); if (gs.isFullScreenSupported()) { Frame frame = new Frame(gs.getDefaultConfiguration()); SpaceInvaderUI spaceInvaderUI […]

Java密钥绑定不起作用

我试图在JPanel上用Java创建键绑定。 当我按下“w”按钮时,我想要执行某个动作。 我按照Java教程进行绑定,但actionPerformed方法不执行(即没有文本打印出来)。 以下是我的测试GUI的全部代码,相关部分突出显示: import java.awt.BorderLayout; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.KeyStroke; @SuppressWarnings(“serial”) public class Test extends JFrame{ private JPanel panel; public Test(){ super(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500,500); setLayout(new BorderLayout()); setVisible(true); panel = new JPanel(); // HERE ARE THE KEY BINDINGS panel.getInputMap().put(KeyStroke.getKeyStroke(‘w’),”forward”); panel.getActionMap().put(“forward”, new AbstractAction(){ @Override public void actionPerformed(ActionEvent e){ System.out.println(“test”); } }); […]

程序无法正确绘制屏幕

我一直在构建一个简短的程序,它基本上在JPanel上绘制一个太空船,并听取指示程序射击子弹的键。 问题是它甚至没有在屏幕上绘制宇宙飞船或子弹。 我还怀疑KeyBindings可能无法工作,因为这是以前的问题(我可能已经或可能没有修复),但手头的主要问题仍然是我的屏幕没有被绘制。 这是我的代码: public enum Direction { LEFT, RIGHT, SPACE } import javax.swing.JFrame; public class Main { public static void main(String[] args) { JFrame frame; Ship s1; Shoot shoot; // Set the frame up frame = new JFrame(); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); frame.setVisible(true); // Get some more necessary objects s1 = new Ship(); shoot […]

Java KeyEvent方形运动

我有一段代码,当按下任何箭头键时会触发KeyEvent。 这反过来导致正方形在屏幕上移动。 现在我注意到当我按住键时,方块移动但是如果你理解我的意思,那么在最初移动到后续移动之后的时间很长 我将如何减少这个时间? 谢谢! import java.awt.*; import javax.swing.*; import squarequest.sprites.*; import java.awt.event.*; public class GamePanel extends JPanel{ private final int HEIGHT = 400; private final int WIDTH = 600; private Square square; private Circle circle; public GamePanel(){ addKeyListener(new DirectionListener()); setBackground (Color.white); setPreferredSize(new Dimension(WIDTH, HEIGHT)); setFocusable(true); square = new Square(); } public void paintComponent(Graphics g){ […]