java键盘按键()事件无响应

packagesnake;importjavax.swing.JPanel;importjava.awt.Graphics;importjava.awt.Color;im... package snake;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.ImageIcon;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.Font;
import javax.swing.*;
import java.awt.event.*;

public class SnakePanel extends JPanel implements KeyListener,ActionListener{
ImageIcon up = new ImageIcon("snake.jpg");
ImageIcon down = new ImageIcon("snake.jpg");
ImageIcon left = new ImageIcon("snake.jpg");
ImageIcon right = new ImageIcon("snake.jpg");
ImageIcon title = new ImageIcon("title.jpg");
ImageIcon food = new ImageIcon("snake.jpg");
ImageIcon body = new ImageIcon("snake.jpg");

int[] snakex = new int[750];
int[] snakey = new int[750];
int len = 3;
String fangxiang = "R";//R右,L左,D下,U上
boolean isStarted = false;
Timer timer = new Timer(100,this);//100ms ,时间到了去找自己的方法acionPerformed

public SnakePanel() {
this.setFocusable(true);//焦点
this.addKeyListener(this);//自己监听自己的按键事件,加在构造函数中
setup();

timer.start();
}
public void paint(Graphics g){
//this.setBackground(Color.BLUE);
//super.paint(g);
//this.setBackground(Color.RED);
super.paint(g);
setBackground(Color.RED);
title.paintIcon(this,g,10,10);
g.fillRect(25,75,850,600);
//画蛇头
if (fangxiang.equals("R")){
right.paintIcon(this,g,snakex[0],snakey[0]);
}else if(fangxiang.equals("L")){
left.paintIcon(this,g,snakex[0],snakey[0]);
}else if(fangxiang.equals("D")){
down.paintIcon(this,g,snakex[0],snakey[0]);
}else if(fangxiang.equals("U")){
up.paintIcon(this,g,snakex[0],snakey[0]);
}
//画蛇身
for(int i = 1; i<len; i++){
body.paintIcon(this,g,snakex[i],snakey[i]);
}
}
public void setup(){
len = 3;
fangxiang = "R";
snakex[0] = 100;
snakey[0] = 100;
snakex[1] = 75;
snakey[1] = 100;
snakex[2] = 50;
snakey[2] = 100;
}
@Override
public void keyTyped(KeyEvent e){
//键入某个键时调用此方法
}
@Override
public void keyPressed(KeyEvent e){
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_DOWN){
isStarted = !isStarted;
repaint();
}
}
@Override
public void actionPerformed(ActionEvent e){
//1再定义一个闹钟
timer.start();

//2移动数据
if(isStarted){
for(int i=len; i>0; i++){
snakex[i] = snakex[i-1];
snakey[i] = snakey[i-1];
}
}

//3repaint()
}

@Override
public void keyReleased(KeyEvent e){
//释放某个键时调用此方法

}
}
package snake;
import javax.swing.JFrame;
import java.awt.Color;
import snake.SnakePanel;
import javax.swing.JPanel;

public class Snake{
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setBounds(10,10,900,720);//900为宽
frame.setResizable(false);//参数为boolean类型,resizeable值为true时,表示在生成的窗体可以自由改变大小;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭frame
System.out.println("HelloWorld");

SnakePanel panel = new SnakePanel();
frame.add(panel);
frame.setVisible(true);//表示可见
}
}
展开
 我来答
miniappc1me8mgsar5jz
2018-01-04 · TA获得超过496个赞
知道小有建树答主
回答量:614
采纳率:68%
帮助的人:111万
展开全部
没看到你代码里有监听键盘事件啊?
看到了监听代码;repaint()这个方法没有任何动作?
追问
这个应该不需要什么动作吧,现在是按键一点反应也没有,加了动作也没有反应
梦回三国贱貂蝉
2018-01-04 · TA获得超过1068个赞
知道小有建树答主
回答量:765
采纳率:100%
帮助的人:154万
展开全部
参考JNA的KeyHook示例:/sun/jna/contrib/demo/KeyHook.java
追问
你这个是一个网站么?打不开呀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式