Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Repaint()不调用paintComponent()Java_Java_Paintcomponent_Repaint - Fatal编程技术网

Repaint()不调用paintComponent()Java

Repaint()不调用paintComponent()Java,java,paintcomponent,repaint,Java,Paintcomponent,Repaint,我正试图改造Snake来改进我的编程,我已经读了好几个小时了,其他人也有同样的问题,但他们似乎都和我自己的代码不一样。这是我的相关代码: package snake; import java.awt.*; import javax.swing.JFrame; import javax.swing.JPanel; public class PlayGame extends JPanel implements Runnable{ private JFrame jfr; priva

我正试图改造Snake来改进我的编程,我已经读了好几个小时了,其他人也有同样的问题,但他们似乎都和我自己的代码不一样。这是我的相关代码:

package snake;

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

public class PlayGame extends JPanel implements Runnable{
    private JFrame jfr;
    private JPanel jpn;

    PickupBall b = new PickupBall();
    Snake bob = new Snake();

    public PlayGame(){
        jfr = new JFrame("Snake");            
        jfr.setSize(640,640);
        jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jpn = new JPanel();
        jpn.setBackground(Color.WHITE);

        jfr.add(jpn);            
        jfr.setVisible(true);             
    }

    @Override
    public void run(){            
        while(true){                
            repaint();
        }
    }        

    @Override
    public void paintComponent(Graphics g){            
        super.paintComponent(g);            
        b.draw(g);
    }        

    public static void main(String[] args) {            
        PlayGame p = new PlayGame();  
        Thread t = new Thread(p);

        t.start();           

    }


 }
一切正常,while(true)循环启动,但什么也没发生

package snake;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

public class PickupBall {
//constructor
public PickupBall(){
    xPos = (int) (((Math.random()*31)+1)*20);
    yPos = (int) (((Math.random()*31)+1)*20);        
}
//constants
public final int balletjeSides = 20;

//variables
public int xPos;
public int yPos;
//methods
public void draw(Graphics g){
    g.setColor(Color.RED);
    g.fillRoundRect(this.xPos, this.yPos, balletjeSides, balletjeSides, 5, 5);
}

}

我缺少什么?

只需添加
jfr.setContentPane(这个)onstructor
中,正如@Berger所说,你实际上有一个
JPanel
PlayGame
实例,但是你正在创建的
JFrame
并不使用这个
JPanel
实例,而是简单地在你的代码中添加一个名为
jpn
的空
JPanel
,您的
jfr
没有任何内容

新的
构造函数可以如下所示:

private JFrame jfr;
//private JPanel jpn;

PickupBall b = new PickupBall();
//Snake bob = new Snake();

public PlayGame() {
    jfr = new JFrame("Snake");
    jfr.setSize(640, 640);
    jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //jpn = new JPanel();
    this.setBackground(Color.WHITE);

    //jfr.add(jpn);
    jfr.setContentPane(this);
    jfr.setVisible(true);
}

如您所见,我注释掉了
jpn
变量,因为您想要使用的实际
JPanel
PlayGame
类本身,而不是该类中定义的
JPanel

您的
PlayGame
实例从未显示在代码中,所以它的画显然是看不见的。哦,哇,我不敢相信我的脑袋没有把“扩展JPanel”和我的类获得JPanel的功能联系起来。谢谢