
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);//表示可见
}
} 展开
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);//表示可见
}
} 展开
2个回答
展开全部
没看到你代码里有监听键盘事件啊?
看到了监听代码;repaint()这个方法没有任何动作?
看到了监听代码;repaint()这个方法没有任何动作?
追问
这个应该不需要什么动作吧,现在是按键一点反应也没有,加了动作也没有反应
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询