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.