title: Drawing a circle into a Jframe
body: <p>I’m trying to draw a small circle into a gray square JFrame as an indicator of stick positions for an RC remote.</p>
  
  <p>I’ve got two classes:</p>
  
  <pre><code>public class GUI2 extends JFrame {
  
  private JPanel contentPane;
  
  /**
   * Launch the application.
   */
  public static void main(String[] args) {
      EventQueue.invokeLater(new Runnable() {
          public void run() {
              try {
                  GUI2 frame = new GUI2();
                  frame.setVisible(true);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      });
  }
  public GUI2() {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setBounds(100, 100, 450, 300);
      contentPane = new JPanel();
      contentPane.setLayout(new BorderLayout(0, 0));
      contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
      setContentPane(contentPane);
      StickWidget Left = new StickWidget();
      Left.setName("Left Stick");
      Left.drawCircle(10, 10);
      contentPane.add(Left.draw(), BorderLayout.EAST);
      StickWidget Right = new StickWidget();
      Right.setName("Right Stick");
      contentPane.add(Right.draw(), BorderLayout.WEST);
      }
  }
  </code></pre>
  
  <p>And I’ve got a second class:</p>
  
  <pre><code>public class StickWidget extends JPanel {
  
  private javax.swing.JPanel panel_1;
  private String NameOfStick;
  private int xpos;
  private int ypos;
  
  public void initcomponents()
  {
  panel_1 = new javax.swing.JPanel();
  }
  
  public StickWidget() {
      //do nothing?
  }
  
  public Component draw()
  {
      initcomponents();
      JPanel main = new JPanel();
      main.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
      Dimension D1 = new Dimension(120, 150);
      main.setMinimumSize(D1);
      main.setMaximumSize(D1);
      main.setPreferredSize(D1);
      main.setSize(D1);
      main.setLayout(new MigLayout("", "[grow]", "[grow][grow]"));
      JPanel panel = new JPanel();
      main.add(panel, "cell 0 0,grow");
  
      JLabel StickName = new JLabel(NameOfStick);
      panel.add(StickName);
  
  
      panel_1.setBackground(Color.LIGHT_GRAY);
      Dimension d = new Dimension(100, 100);
      panel_1.setMinimumSize(d);
      panel_1.setMaximumSize(d);
      main.add(panel_1, "cell 0 1,grow");
      return main;
  }
  
  public void drawCircle(int x, int y)
  {
      Graphics2D g2d = (Graphics2D)panel_1.getGraphics();
      g2d.fillOval(x, y, 10, 10);
  }
  public void setName(String s)
  {
      NameOfStick = s;
  }
  </code></pre>
  
  <p>}</p>
  
  <p>The current program draws the GUI just fine however when I attempt to run the drawCircle() it falls apart and gives me errors. I’m not sure what I’ve done wrong, I don’t have a lot of experience with 2d drawing.</p>
  
  <p>So my questions:</p>
  
  <p>-Is this the right approach to this?
  -How can I get the drawCircle to draw circles within the gray Jframes?</p>
  
  <p>Error Message:</p>
  
  <pre><code>java.lang.NullPointerException
  at experiments.StickWidget.drawCircle(StickWidget.java:59)
  at experiments.GUI2.&lt;init&gt;(GUI2.java:44)
  at experiments.GUI2$1.run(GUI2.java:23)
  at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
  at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:745)
  at java.awt.EventQueue.access$300(EventQueue.java:103)
  at java.awt.EventQueue$3.run(EventQueue.java:706)
  at java.awt.EventQueue$3.run(EventQueue.java:704)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
  at java.awt.EventQueue.dispatchEvent(EventQueue.java:715)
  at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
  at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
  at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
  at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
  </code></pre>