import javax.swing.JFrame;
import javax.swing.JPanel;

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

public class GraphicsFrame extends JFrame {

  private DisplayPanel display;

  public GraphicsFrame() {
    setSize (300, 300);
    setLocationRelativeTo (null);    // Centered on screen
    setTitle ("Graphics Frame");
    setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

    setLayout (new BorderLayout());
    display = new DisplayPanel();        
    add (display, BorderLayout.CENTER);
  }

  public static void main (String [] args) {
    GraphicsFrame frame = new GraphicsFrame();
    frame.setVisible(true);
  }
}

class DisplayPanel extends JPanel {

  public DisplayPanel() {
    setBackground (Color.BLACK);
  }

  protected void paintComponent (Graphics g) {
    super.paintComponent (g);                  // DO NOT FORGET!
    int xcenter = getWidth() / 2;
    int ycenter = getHeight() / 2;
    int radius = Math.min (xcenter, ycenter);
    int diameter = 2 * radius;

    g.setColor (Color.RED);
    g.drawOval (xcenter - radius, ycenter - radius, diameter, diameter);
  }
}
