2012-06-23 65 views
4

我有一些我需要修改的代码。在代码中,原作者使用KeyStroke.getKeyStroke来进行用户输入。例如,在此代码中,他使用a而不是左箭头。Java:使用箭头键击键

我想改变这一点,但我不知道如何。

这里是原代码:

registerKeyboardAction(
     new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       tick(RIGHT); 
      } 
     }, "right", KeyStroke.getKeyStroke('d'), WHEN_IN_FOCUSED_WINDOW 
); 

我必须将它更改为这样的事情,但在运行时,它不工作: KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT);

KeyStroke.getKeyStroke("RIGHT");

+0

我认为['registerKeyboardAction的()'](http://docs.oracle.com/javase/1.3/docs/api/javax/swing/JComponent.html )已经过时了一段时间。 –

回答

6

通过按DOWNARROW KEY来启动程序,首先要看字符串。这里有一个看看这个例子程序:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class KeyBindingExample 
{ 
    private void createAndDisplayGUI() 
    { 
     JFrame frame = new JFrame("Key Binding Example"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     DrawingPanel contentPane = new DrawingPanel(); 
     frame.setContentPane(contentPane); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
     contentPane.requestFocusInWindow(); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new KeyBindingExample().createAndDisplayGUI(); 
      } 
     }); 
    } 
} 

class DrawingPanel extends JPanel 
{ 
    private int x; 
    private int y; 
    private String[] commands = { 
            "UP", 
            "DOWN", 
            "LEFT", 
            "RIGHT" 
           };      

    private ActionListener panelAction = new ActionListener() 
    { 
     @Override 
     public void actionPerformed(ActionEvent ae) 
     { 
      String command = (String) ae.getActionCommand(); 
      if (command.equals(commands[0])) 
       y -= 1;    
      else if (command.equals(commands[1])) 
       y += 1; 
      else if (command.equals(commands[2])) 
       x -= 1; 
      else if (command.equals(commands[3])) 
       x += 1; 

      repaint(); 
     } 
    }; 

    public DrawingPanel() 
    { 
     x = 0; 
     y = 0; 

     for (int i = 0; i < commands.length; i++)  
      registerKeyboardAction(panelAction, 
          commands[i], 
          KeyStroke.getKeyStroke(commands[i]), 
          JComponent.WHEN_IN_FOCUSED_WINDOW); 
    } 

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

    @Override 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     String displayText = "X : " + x + " and Y : " + y; 
     System.out.println(displayText); 
     g.drawString(displayText, x, y); 
    } 
} 
5

你应该能够使用KeyStroke.getKeyStroke("DOWN");,"UP","LEFT","RIGHT",做你想做的。

有关更多详细信息,请参阅javadoc

+0

我忘了在本文中加入这个案例。没有错误,但仍然无法正常工作。 :( – hqt

+0

@hqt whats'tick(RIGHT);',因为在我的代码中为我工作,为了更好地帮助更快地发布[SSCCE](http://sscce.org/) – mKorbel

+0

+1,这确实起作用: - ) –