Graphics2D question.  
Author Message
RichT





PostPosted: 2008-3-14 3:35:00 Top

java-programmer, Graphics2D question. Hello,

I want to build my application from three main classes.
1. A frame class to handle file operations.
2. A Drawing panel to render images to.
3. An engine to perform the actual rendering.

All the examples I have read so far for Image stuff in Java have
everything stuffed into one monolithic class, and the crux of the
rendering seems to be done in paint(Graphics g) or
paintComponent(Graphics g) using a g2d object cast againg the parameter g.

If I wanted to do calculations for rotations translations etc I can do
this with the AffineTransform class setX methods, but the drawImage
method of g2d seems to be handled in the paint/paintComponent methods.

This is fine until I want to specify x, y arguments in the drawImage
Method as neither Paint or PaintComponent take these parameters in their
method signature how can I do this, is there another way to draw apart
from the paint/paint component methods?

Any help appreciated.
 
RichT





PostPosted: 2008-3-14 4:57:00 Top

java-programmer >> Graphics2D question.
> Just make the parameters class variables and they will be visible to
> both your calculation method and your rendering method.
>
> import java.awt.*;
> import java.awt.event.*;
> import javax.swing.*;
>
> class test7 extends JPanel implements Runnable {
> static final Color[] COLORS =
> {Color.RED, Color.BLUE, Color.GREEN, Color.WHITE};
> volatile int colorIndex;
>
> public test7() {
> setPreferredSize(new Dimension(400,300));
> }
>
> public void paintComponent(Graphics g) {
> g.setColor(COLORS[colorIndex]);
> g.fillRect(0,0,getWidth(),getHeight());
> }
>
> public void run() {
> while (true) {
> ++colorIndex;
> colorIndex %= 4;
> repaint();
> try {
> Thread.sleep(1000);
> } catch (InterruptedException ie) { }
> }
> }
>
> public static void main(String[] args) {
> EventQueue.invokeLater(new Runnable() {
> public void run() {
> JFrame f = new JFrame();
> f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>
> test7 t7 = new test7();
> f.add(t7);
> f.pack();
> f.setVisible(true);
> new Thread(t7).start();
> }
> });
> }
> }
>
> The frame to hold your display component need be no more complicated
> than the one I show here. If you need menus, add those to the frame but
> have the display component implement ActionListener. You could
> separate the rendering method from the display class but there is
> probably no real need. If you want one display class and multiple
> calculating methods, just override that method.
>
> The volatile modifier is needed on the colorIndex variable because it
> will be read in more than one thread. If you are going to do more
> sophisticated animation, consider using a javax.swing.Timer so that the
> calculations can be done on the EDT (unless they take a long time).
>
> Take a look at the Asteroids game I wrote that has many of these
> concepts in action.
>
> http://rabbitbrush.frazmtn.com/
>
> The source code is there on the applet page.
>

Hi, thanks for your help :)

 
Roedy Green





PostPosted: 2008-3-19 19:21:00 Top

java-programmer >> Graphics2D question. On Thu, 13 Mar 2008 19:34:37 +0000, RichT <email***@***.com>
wrote, quoted or indirectly quoted someone who said :

>All the examples I have read so far for Image stuff in Java have
>everything stuffed into one monolithic class, and the crux of the
>rendering seems to be done in paint(Graphics g) or
>paintComponent(Graphics g) using a g2d object cast againg the parameter g.

have a look at http://mindprod.com/products.html#SCREWS
too see some sample code.
--

Roedy Green Canadian Mind Products
The Java Glossary
http://mindprod.com