Jonathan
Jonathan

Reputation: 535

Using awt.Graphics in a method

I created a class called Test, most likely where I went wrong.

import javax.swing.JPanel;
import java.awt.*;
public class Test extends JPanel {

Graphics grap;
public void sun()
{
    super.paintComponent(grap);
    grap.setColor(Color.YELLOW);
    grap.fillOval(0,0,20,20);
}
}

As you can see I want to paint a yellow "Oval" in the top left corner of the panel using a method but I did not use a PaintComponent method. Now I try to implement it in my Paint component method which is in a class called Painting.

//import...;
public class Painting extends JPanel{

   protected void paintComponent(Graphics g)
   {
      Test test = new Test();

      test.sun();

   }

And now i created a main window that will create a panel and display the yellow oval.

//import...
public class main extends JFrame{
    public static main(String [] args){

        JFrame window = new JFrame();
        window.add(new Painting());
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(100,100);
        window.setLocationRelativeTo(null);
        window.setVisible(true);

    }

}

But this does not work. I have a feeling that it is the sun method in test. How would I get this to work? I have looked in all the java books and cant find anything that can help.

Please note that I do not what to add parameters to the method.

Thank You Tom.

Upvotes: 1

Views: 104

Answers (2)

camickr
camickr

Reputation: 324128

If i want to draw 50 ovals on different places then i would have a problem with extensive code

Then you would keep a List of the ovals that you want to paint. See Custom Painting Approaches which paints a bunch of Rectangles on a panel. All the code does is loop through the ArrayList to paint the Rectangle. Only a couple of lines of code are required.

Upvotes: 2

Vishal K
Vishal K

Reputation: 13066

Few points to be noted here:

  1. Never call super.paintComponent by yourself except within the overriden paintComponent method itself.
  2. If you want to do some Graphics activities then override the paintComponent method and draw graphics over there
  3. When you are overriding paintComponent method then the first statement within the method should be super.paintComponent(g).

Now, going by all above points your code should now be like this:

public class Test extends JPanel {

 public void paintComponent(Graphics grap)
 {
    super.paintComponent(grap);
    grap.setColor(Color.YELLOW);
    grap.fillOval(0,0,20,20);
 }
}

And your Painting class should be like this:

public class Painting extends JPanel{
   Test test;
   public Painting()
   {
     test = new Test();
     setLayout(new BorderLayout());
     add(test);
   }
}

Upvotes: 2

Related Questions