To draw a rectangle in Swing you should:
- First of all, never draw directly in the JFrame or other top-level window.
- Instead draw in a JPanel, JComponent or other class that eventually extends from JComponent.
- You should override the
paintComponent(Graphics g)
method. - You should be sure to call the super method
- You should draw your rectangle with the Graphics object provided to the method by the JVM.
- You should read the painting in Swing tutorial.
Clear?
e.g.,
import java.awt.Dimension; import java.awt.Graphics; import javax.swing.*; public class DrawRect extends JPanel { private static final int RECT_X = 20; private static final int RECT_Y = RECT_X; private static final int RECT_WIDTH = 100; private static final int RECT_HEIGHT = RECT_WIDTH; @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // draw the rectangle here g.drawRect(RECT_X, RECT_Y, RECT_WIDTH, RECT_HEIGHT); } @Override public Dimension getPreferredSize() { // so that our GUI is big enough return new Dimension(RECT_WIDTH + 2 * RECT_X, RECT_HEIGHT + 2 * RECT_Y); } // create the GUI explicitly on the Swing event thread private static void createAndShowGui() { DrawRect mainPanel = new DrawRect(); JFrame frame = new JFrame("DrawRect"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(mainPanel); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); }