Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / GUI / March 2008

Tip: Looking for answers? Try searching our database.

Graphics2D question.

Thread view: 
RichT - 13 Mar 2008 20:34 GMT
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.
Knute Johnson - 13 Mar 2008 21:23 GMT
> Hello,
>
[quoted text clipped - 18 lines]
>
> Any help appreciated.

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.

Signature

Knute Johnson
email s/nospam/linux/

RichT - 13 Mar 2008 21:56 GMT
> Just make the parameters class variables and they will be visible to
> both your calculation method and your rendering method.
[quoted text clipped - 62 lines]
>
> The source code is there on the applet page.

Hi, thanks for your help :)
Knute Johnson - 13 Mar 2008 21:25 GMT
> Hello,
>
[quoted text clipped - 18 lines]
>
> Any help appreciated.

Look at the AnalogClock code too.

Signature

Knute Johnson
email s/nospam/linux/

Roedy Green - 19 Mar 2008 12:21 GMT
>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.
Signature


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



Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.