Using paintComponent() to draw rectangle in JFrame

java, jframe, jpanel, paintcomponent, swing

Solution

Your class `DrawPanel` is confined to the scope of your `main` method and is not visible to your constructor.

You need to move `DrawPanel` out of your `main` method, then add it to your `JFrame`:

frame.add(panel);

Also, better to call `frame.setVisible(true)` after all components have been added.

Problem

I'm trying to create a program that draws shapes (a rectangle on the example below) using JPanel's paintComponent(), but I can't get it to work and can't spot what is wrong. The code is as follows: ``` import javax.swing.*; import java.awt.*; public class RandomRec{ JFrame frame; public void go(){ frame = new JFrame(); frame.setSize(500,500); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); DrawPanel panel = new DrawPanel(); } public static void main (String[] args){ class DrawPanel extends JPanel{ public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.orange); g.drawRect(20, 20, 100, 60); } } RandomRec test = new RandomRec(); test.go(); } } ``` Any help on this would be much appreciated. Thank you. *UPDATE* Problem solved! Moving the go() method out of the main method, adding a frame.add(panel) and moving the frame.setVisible(true) to the bottom of the go() method (more specifically, move it after the panel is added to the frame) has sorted the issue. Thank you.

Original source