Java 在JPanel中未调用paintComponent

Java 在JPanel中未调用paintComponent,java,jpanel,paint,Java,Jpanel,Paint,我有以下代码: package hra; import java.awt.Color; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import static javax.swing.JFrame.EXIT_ON_CLOSE; import ja

我有以下代码:

package hra;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class HerniPole extends JPanel implements KeyListener
{
    public int velikostPole;
    HerniPole(int velikostPole)
    {
        this.velikostPole = velikostPole;

        Color background = new Color(187, 173, 163);
        EventQueue.invokeLater(new Runnable() 
        {
            @Override
            public void run() 
            {
                try 
                {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex)
                {
                    System.err.println("Error!");
                }
            }
        });
        JFrame frame = new JFrame();
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setTitle("2048");
        frame.getContentPane().setBackground(background);
        frame.setSize(450, 450);
        frame.addKeyListener(this);
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    @Override
    public void paintComponent(Graphics g)
    {
        System.out.println("xD");
        g.setColor(Color.BLACK);
        g.drawRect(20, 20, 20, 20);
        g.setColor(Color.yellow);
    }

    @Override
    public void keyTyped(KeyEvent ke) 
    {
        System.out.println(ke.getKeyCode());
    }
    @Override
    public void keyPressed(KeyEvent ke) 
    {

    }
    @Override
    public void keyReleased(KeyEvent ke) 
    {

    }
}

并且不会调用paintComponent,也不会绘制甚至重新绘制。我做错了什么?我在StackOverflow上找到的所有东西都试过了,但都没用。如何解决这个问题?谢谢。

您错过了一些东西:

您没有main方法,或者可能有main方法,但没有在问题中发布,也没有创建HerniPole实例。 添加如下主方法:

public static void main(String[] args) {
    new HerniPole(0);
}
您没有将HerniPole实例添加到JFrame。 在构造函数中,frame.setVisibletrue之前的某个位置执行此操作


您创建了JFrame并使其可见。但是您还没有向它添加任何组件。也许你应该创建一个HerniPole的实例并将其添加到你的JFrame中?对不起,我忘了发布我的main,frame.addthis;帮助了我。谢谢
 frame.add(this);