d150000000 2020-11-03 16:12 采纳率: 0%
浏览 44

添加键盘监听失败应该怎么办?

package eatsnake;

import com.sun.javafx.scene.traversal.Direction;
import com.sun.org.apache.regexp.internal.REDebugCompiler;

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

/**
 * @Auther: Du Yushun
 * @Date: 2020/10/25 - 10 - 25 - 9:46
 * @Description: eatsnake
 * @version: 1.8
 */
public class GamePanel extends JPanel {
    //定义
    int[] snakeX = new int [100];
    int[] snakeY = new int [100];
    int length;
    //方向
    String direction ;
    //定义暂停
    boolean isStart = !false;
    public void init(){
        length = 3;
        //初始第一节
        snakeX[0] = 125;
        snakeY[0] = 225;
        //初始身体
        for (int i = 1; i < length; i++) {
            snakeX[i] = 100-(i-1)*25;
            snakeY[i] = 225;
        }
        //初始化方向
        direction = "R";
    }
    public GamePanel(){
        //调用初始
        init();
        //焦点放在面板
        this.setFocusable(true);
        //添加键盘监听
        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                super.keyPressed(e);
                int keyCode = e.getKeyCode();
                System.out.println(keyCode);
            }
        });
    }
    //paintComponent:所以画全部在这里面
    @Override
    protected void paintComponent(Graphics g) {//g:画笔
        super.paintComponent(g);
        //设置背景颜色
        this.setBackground(new Color(227,253,255));
        //画头
        images.headImg.paintIcon(this,g,10,10);
        //设置画笔颜色
        g.setColor(new Color(237,233,255));
        //画矩形
        g.fillRect(10,70,770,685);
        //花蛇头
        switch (direction)
        {
            case"U":  images.upImg.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;
            case"R":  images.rightImg.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;
            case"D":  images.downImg.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;
            case"L":  images.leftImg.paintIcon(this,g,snakeX[0],snakeY[0]);
                break;
        }
        //画蛇身
        for (int i = 1; i <length ; i++) {
            images.bodyImg.paintIcon(this,g,snakeX[i],snakeY[i]);
        }
        //如果暂停
        if (isStart==false){
            //字色
            g.setColor(new Color(165,102,236));
            //字体,加粗,字号
            g.setFont(new Font("微软雅黑",Font.BOLD,40));
            g.drawString("点击空格开始游戏",250,330);

        }
        }
}

 

package eatsnake;

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

/**
 * @Auther: Du Yushun
 * @Date: 2020/10/25 - 10 - 25 - 9:06
 * @Description: eatsnake
 * @version: 1.8
 */
public class StartGame {
    public  static final int SSIZE = 800;
    public static void main(String[] args) {
        //1.创建窗口
        JFrame jf = new JFrame();
        //设置题目
        jf.setTitle("贪吃蛇_西安信息职业大学");
        //求屏幕宽高
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        //设置宽高,和起点坐标
        jf.setBounds((width-SSIZE)/2,(height-SSIZE)/2,SSIZE,SSIZE);
        //手动显示窗口
        jf.setVisible(true);
        //窗口是否可以变化
        jf.setResizable(false);
        //窗口关闭同时
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //面板对象
        GamePanel gp = new GamePanel();
        //放入窗体中
        jf.add(gp);
    }
}

 

  • 写回答

1条回答 默认 最新

  • messilion 2023-05-08 13:40
    关注

    如果添加键盘监听失败,可以检查以下几个方面:

    1. 确认面板已经获得了焦点,如果没有,可以使用setFocusable(true)方法设置面板获得焦点。

    2. 确认是否添加了KeyListener监听器,如果没有,可以使用addKeyListener()方法添加监听器。

    3. 确认键盘事件是否被正确处理,可以在监听器的回调方法中打印keyCode,查看是否能够正确获取键盘事件。如果未能正确获取,可以检查是否有其他组件抢占了键盘焦点,或者是否有其他监听器覆盖了当前监听器。

    4. 确认键盘事件是否被正确处理后,可以根据keyCode判断用户按下的键,并进行相应的操作。

    评论

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效