Tilted Forum Project Discussion Community  

Go Back   Tilted Forum Project Discussion Community > Interests > Tilted Technology


 
 
LinkBack Thread Tools
Old 09-22-2004, 04:07 PM   #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);
}
insidious_machinae is offline  
Old 09-22-2004, 04:30 PM   #2 (permalink)
Psycho
 
Nevermind, I somehow figured it out.
insidious_machinae is offline  
Old 09-26-2004, 11:25 PM   #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.
Robaggio is offline  
 

Tags
graphics2d, java


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT -8. The time now is 06:03 AM.

Tilted Forum Project

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Search Engine Optimization by vBSEO 3.6.0 PL2
© 2002-2012 Tilted Forum Project

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62