关于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的时候,我再去进行键盘监听不好使,由此我产生了个疑问,键盘监听是针对窗口的 不针对画布的吗

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

解决了: 需要操作两个,首先需要对

this.setVisible(true);

第二个获取焦点

this.setFocusable(true);