![]() |
![]() |
#1 (permalink) |
Psycho
|
Java Graphics2D
I'm working on a program using a JFrame.
I have to have the ability to draw boxes and lines anywhere I want. I have methods specifically set up to do this, and they would work except that I can't seem to get the Graphics2D object to work the way I want it. Here's a simple example of how this problem arises: ***********code********** public void update(Graphics g) { Graphics2D g2 = (Graphics2D)g; g2.draw(new Rectangle2D.Double(5,5,50,50)); // works } public void drawLine(int xstart, int ystart, int xend, int yend) { Graphics2D g2 = (Graphics2D)getGraphics(); g2.drawLine(xstart, ystart, xend, yend); // doesn't work update(g2); } |
![]() |
![]() |
#3 (permalink) |
Crazy
|
Just a small nitpick that might save you troubles in the future:
Whenever you use a Graphics object or anything that extends it, you should always dispose of it when you are through via .dispose(). The reason being is how Java deals with memory. Graphics objects require large ammounts of contiguous memory- much larger than any usual amount. Although the garbage collector should free this memory, it does so in a fickle manner. Firstly, it may or may not clear the memory when the method is removed from the system stack. Secondly, unless the graphics object is explicitly flagged for removal via dispose(), then the garbage collector can (and will) skip over removing it. This only makes the garbage collector run slower the next time it decides to run, since it's basically doing work it should have done the last time it passed through. You also can't force it to clean up this memory using System.gc() only dispose() will work. This 'bug' (it's acutally a feature- though only for specific scenarios.. for the rest of us, it's annoying) can cause even more problems in Java 1.5+ since now, Java2D can use the OpenGL pipeline. This basically puts all Graphics objecs into video memory and uses your graphics card. Since graphics cards have less memory than the computer itself, it's imperative that it gets cleared at the earliest and most convenient moment. |
![]() |
Tags |
graphics2d, java |
|
|