事件加错地方了。
在Frame的构造函数定义中加上:
this.addKeyListener(new KeyListener() {
public void keyReleased(KeyEvent e)
{
} public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
if (code == KeyEvent.VK_LEFT || code == KeyEvent.VK_A)
{
centerPanel.object.moveleft();
}
else if (code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_D)
{
centerPanel.object.moveright();
}
else if (code == KeyEvent.VK_UP || code == KeyEvent.VK_W)
{
centerPanel.object.moveup();
}
else if (code == KeyEvent.VK_DOWN || code == KeyEvent.VK_S)
{
centerPanel.object.movedown();
}
else
{
System.out.println(e.getKeyChar());
}
} public void keyTyped(KeyEvent e)
{
}
});
在Frame的构造函数定义中加上:
this.addKeyListener(new KeyListener() {
public void keyReleased(KeyEvent e)
{
} public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
if (code == KeyEvent.VK_LEFT || code == KeyEvent.VK_A)
{
centerPanel.object.moveleft();
}
else if (code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_D)
{
centerPanel.object.moveright();
}
else if (code == KeyEvent.VK_UP || code == KeyEvent.VK_W)
{
centerPanel.object.moveup();
}
else if (code == KeyEvent.VK_DOWN || code == KeyEvent.VK_S)
{
centerPanel.object.movedown();
}
else
{
System.out.println(e.getKeyChar());
}
} public void keyTyped(KeyEvent e)
{
}
});
你真的好厉害!把你的只拷过去就OK了,但我有个疑问?《核心技术》那本书里在讲键盘控制的时候KeyListener就是加到Panel的构造函数里的,这两个有什么区别?加到panel 里可以么?怎么加?是不是需要改某些地方?
我觉得可能是因为Panel放在另外一个容器Frame中的原因,所以键盘事件被Frame接收到了,如果想让Panel接收到,可能还需要Frame把事件传过去。
也可能有更好的办法。有时间研究一下。
那别的事件监听器也可以既放在Frame里,也可以放在Panel里了吧
但这两个到底有什么区别呢?
里面到底有什么道理呢?
还是面板上接不到键盘消息?
不明白
明天晚上结帖!
面板上是可以监听事件的,如画图时的,对鼠标事件的监听。
中间详细的机理,希望有这方面的专家出来讲一下。(我没有仔细研究过,不敢再乱说了,以免误导观众。以上仅供参考。)