秀才大大 2021-02-10 21:16 采纳率: 0%
浏览 29

关于java中this相关问题 键盘监听是针对窗口的 不针对画布的吗?

package com.xiucai;

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

/**
 * 绘制面板,游戏的所有组件都用这个面板来华
 */
public class SnackPanal extends JPanel {
    //游戏中所有事件都用这个画笔
    //定义蛇的数据长度
    int length;//蛇的长度
    int[] snakeX = new int[600];
    int[] snakeY = new int[500];
    String fx;
    boolean isStrat ;
//初始化方法
    public void init() {
        length = 3;
        //初始的三个区域块的位置
        snakeX[0] =100;snakeY[0] =100;//脑袋的坐标
        snakeX[1] =75;snakeY[1] =100;//第一个身体的坐标
        snakeX[2] =50;snakeY[2] =100;//第二个身体坐标
         fx = "R";//初始方向向右
    }



    @Override
    public void paint(Graphics g) {
        super.paint(g);
        this.setBackground(Color.white);
        //头部的广告栏

        new Data();
        Data.Iurl_head.paintIcon(this,g,25,11);
        g.setColor(Color.BLUE);
        g.fillRect(25,75,850,600);

        if (fx.equals("R") ) {
            Data.Iurl_right.paintIcon(this,g,snakeX[0],snakeY[0]);
        }else if (fx.equals("U") ) {
            Data.Iurl_up.paintIcon(this,g,snakeX[0],snakeY[0]);
        }else if (fx.equals("D") ) {
            Data.Iurl_down.paintIcon(this,g,snakeX[0],snakeY[0]);
        }else if (fx.equals("L") ) {
            Data.Iurl_left.paintIcon(this,g,snakeX[0],snakeY[0]);
        }


      for (int l = 1; l < length; l++) {
          Data.Iurl_body.paintIcon(this,g,snakeX[l],snakeY[l]);

        }
        if (isStrat == false) {
            //设置字体
            g.setColor(Color.RED);
            g.setFont(new Font("微软雅黑",Font.BOLD,40));
            g.drawString("按压空格开始游戏",300,300);
        }

        //把小蛇画上去

    }
 //构造函数
    public SnackPanal(JFrameDemo jFrameDemo) {

        init();
        System.out.println("进行了这一步");
        //获取键盘焦点事件,可以获取焦点
        this.setFocusable(true);
        System.out.println("进行了这一步");
        //匿名内部类写键盘按下事件
        jFrameDemo.addKeyListener(new KeyAdapter() {

            @Override
         public void keyPressed(KeyEvent e) {
                System.out.println("进行了这一步");
                super.keyPressed(e);
                if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                    isStrat = !isStrat;
                    //重新画
                    repaint();
                    System.out.println(isStrat);

            }
        }}); //获得键盘监听事件

    }







}

//键盘监听器

 

 

上边的代码是一个画板 主窗口在下边的代码中建立,在这里我建立了一个对象,使用键盘监听事件,当我把这个对象替换成this的时候,我再去进行键盘监听不好使,由此我产生了个疑问,键盘监听是针对窗口的 不针对画布的吗

  • 写回答

2条回答 默认 最新

  • BCS-点心 2021-02-10 22:30
    关注

    提个建议,个人觉得Java的这块知识使用场合很少了,花费时间去学习有些浪费。

    评论

报告相同问题?

悬赏问题

  • ¥15 ul做导航栏格式不对怎么改?
  • ¥20 用户端如何上传图片到服务器和数据库里
  • ¥15 现在研究生在烦开题,看了一些文献,但不知道自己要做什么,求指导。
  • ¥15 vivado封装时总是显示缺少一个dcp文件
  • ¥100 pxe uefi启动 tinycore
  • ¥15 我pycharm运行jupyter时出现Jupyter server process exited with code 1,然后打开cmd显示如下
  • ¥15 可否使用carsim-simulink进行四轮独立转向汽车的联合仿真,实现四轮独立转向汽车原地旋转、斜向形式、横移等动作,如果可以的话在carsim中如何进行相应设置
  • ¥15 Caché 2016 在Java环境通过jdbc 执行sql报Parameter list mismatch错误,但是同样的sql使用连接工具可以查询出数据
  • ¥15 疾病的获得与年龄是否有关
  • ¥15 opencv.js内存,CPU飙升