我设计了一个小游戏。控制一架潜艇上下左右的移动。
我想实现对键盘的监听,点击→时往右移动等等。
谁对这方面比较懂,举个例子?
我照着学学。下面程序的功能是点击界面上↑按钮的时候输出一个1,谁能帮我改成点击键盘上的↑按键的时候输出一个1?
JButton upBtn=new JButton("↑");
upBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("1");
}
});
我想实现对键盘的监听,点击→时往右移动等等。
谁对这方面比较懂,举个例子?
我照着学学。下面程序的功能是点击界面上↑按钮的时候输出一个1,谁能帮我改成点击键盘上的↑按键的时候输出一个1?
JButton upBtn=new JButton("↑");
upBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("1");
}
});
public void keyReleased(KeyEvent e) {
System.out.println(e.getKeyCode()); // 找找看↑的KeyCode是多少
}也可以用常量:KeyEvent.VK_UP
KEY_TYPED(只在可生成有效 Unicode 字符时产生。)
KEY_RELEASED
但在某些情况下(例如,在激活自动重复或输入方法时),该顺序可能会有所不同(并且与平台有关)。
注: 不产生 Unicode 字符的键组合(如 F1 和 HELP 键等动作键)不会生成 KEY_TYPED 事件。
并非所有键盘和系统都能够生成所有的虚拟键码。在 Java 中不会尝试人为地生成这些键。
虚拟键码不标识物理键:它们取决于平台和键盘布局。例如,使用美国键盘布局时生成 VK_Q 的键在使用法国键盘布局时将生成 VK_A。
并非所有的字符都有与之关联的 keycode。例如,没有用于问号的 keycode,因为没有在主层上显示问号的键盘。
为了支持平台无关的动作键处理,Java 平台为某些功能使用少量附加虚拟键常量,否则必须通过解释虚拟键码和修饰符来识别这些功能。例如,对于日文 Windows 键盘,返回 VK_ALL_CANDIDATES 而不是 VK_CONVERT 加 ALT 修饰符。
正如 Focus Specification 中指定的那样,默认情况下键事件被指派给焦点拥有者。
警告:除了 Java 语言定义的这些键之外(VK_ENTER、VK_BACK_SPACE 和 VK_TAB),不要依赖 VK_ 常量值。Sun 保留将来根据需要更改这些值的权利,以适应更大范围的键盘。
具体实现代码:
public KeyboardPanel()
{
addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
switch (e.getKeyCode())
{
case KeyEvent.VK_DOWN;y+=10;break;
case KeyEvent.VK_UP;y-=10;break;
case KeyEvent.VK_LEFT;y-=10;break;
case KeyEvent.VK_RIGHT;y+=10;break;
deault:keyChar=e.getKeyChar();
}
repaint();
}
});
}
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;import javax.swing.JButton;
import javax.swing.JFrame;import javax.swing.JPanel;public class D extends JPanel{
private JFrame frame;
private Container contentPane;
private JButton button;
public D(){
frame=new JFrame();
frame.setSize(300,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane=frame.getContentPane();
frame.setVisible(true);
init();
}
private void init() {
// TODO Auto-generated method stub
contentPane.setLayout(null);
button=new JButton("按钮");
button.setBounds(50, 50, 80, 30);
contentPane.add(button);
frame.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
System.out.println("实现监听");
if(e.getKeyCode()==e.VK_UP){
System.out.println("up");
}
System.out.println("实现监听");
if(e.getKeyCode()==e.VK_DOWN){
System.out.println("down");
}
}
});
}
public static void main(String[] args) {
new D();
}
}
我尝试着写了上面这个测试程序。我发现这个程序有的时候键盘可以实现监听,正常的输出,有的时候就不可以了。不知道是什么原因?主程序里面添加了这个键盘监听后从来没有正常过。谁知道?
试着给“按钮”加一监听,每次都从新给frame设置焦点,(表述可能不准,请高手指教)则正常。
添加的代码如下:
1 引入包import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
2 按钮事件
//---------加了这段
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
frame.requestFocus();
}
});
//---------