Search code examples
javapaintcomponent

Why paintComponent doesn't work?


I'm having issues with this code. For some reason, paintComponent(Graphics g) simply doesn't work and there doesn't seem to be an answer how to force it to. This is my code:

import javax.swing.JFrame;

public class Robotron extends JFrame
{

    public Robotron ()
    {
        //add(this); This one gave me an error
        setSize(800, 600);
        new TestFrame();
        setVisible(true);
    }


    public static void main(String [ ] args)
    {

        new Robotron();

    }

and this is my TestFrame class that has the paintComponent function:

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

import javax.swing.JPanel;


public class TestFrame extends JPanel
{
     public void paintComponent(Graphics g) 
    {
         g.setColor(Color.BLACK);
         g.fillRect(0, 0, getWidth(), getHeight());
         g.setColor(Color.YELLOW);
         g.fillRect(100, 100, 10, 30);
         System.out.println("Abdullah Paint");

     }


    public TestFrame()
    {
        setFocusable(true);        
        repaint();        

    }


}

What can I do in order to make paintComponent actually play. What I get in the end is just an empty JFrame, with no running of the System.out.println thingy.

Thanks a whole lot, been tackling this for a long time.


Solution

  • You're not adding anything to the JFrame, because of this

    //add(this); 
    

    Here, you were trying to add the component to itself, which is not going to fly.

    Instead, you need to add the TestFrame instance to the Frame.

        add(new TestFrame());
        setSize(800, 600);
        setVisible(true);