advertisement
javaboutique
Search Tips
Articles  |   Tutorials  |   Reviews  |   Tools  |   by Category  |   by Date  |   by Name  |   Submit  |   Source  |   Forums  |  
javaboutique
Browse DevX


Partners & Affiliates











advertisement


Reviews : Java Books :
Beginning Java 2- JDK 1.3 Version : Images and Animation

Buy this book
Title: Beginning Java 2- JDK 1.3 Version
ISBN: 1861003668
US Price: $ 49.99
Canadian Price:
C$ 74.95
UK Price: £ 35.99
Publication Date: March 2000
Pages: 1230
© Wrox Press Limited, US and UK.

Beginning Java 2- JDK 1.3 Version
Images and Animation

The thread code itself will be very similar to the previous example – the timing mechanism is exactly the same. We now need to increment the rotation angle in each time interval so it will be much simpler:

// This method is called when the animation thread is started
public void run()
{
  long time = System.currentTimeMillis(); // Starting time

  // Move image while whirling is true
  while(whirling)
  {
    imagePanel.repaint(); // Repaint the image

    // Wait until the end of the interval
    try
    {
      time += INTERVAL; // Increment the time
      angle = 2.0*Math.PI*stepCount++/ STEPS_PER_ROTATION;
      stepCount %= STEPS_PER_ROTATION;
      Thread.sleep(Math.max(0, time -
	    System.currentTimeMillis()));
    }
    catch (InterruptedException e)
    {
    break;
    }
  }
}
[Lines 17 and 18 above are one line. They have been split for formatting purposes.]

The stepCount variable starts at 0 and is incremented by 1 on each iteration of the loop. Since a complete rotation through 2 radians should occur after STEPS_PER_ROTATION steps, after stepCount steps the rotation angle is the result of the expression2.0*Math.PI*stepCount/STEPS_PER_ROTATION. In the statement calculating the rotation angle we also increment stepCount using the postfix increment operator. The image returns to its original position after STEPS_PER_ROTATION steps, so we maintain the value of stepCount modulo STEPS_PER_ROTATION.

The last bit we need to complete the applet is the ImagePanel class, and this only differs from the previous example in the implementation of the paint() method:

class ImagePanel extends JPanel
{
  public ImagePanel(Image image)
  {
    this.image = image;
  }

  public void paint(Graphics g)
  {
    Graphics2D g2D = (Graphics2D)g;
    g2D.transform(at); // Apply scale & translate

    g2D.setPaint(Color.lightGray);
    g2D.fillRect(0, 0, imageWidth, imageHeight);

    g2D.rotate(angle, imageWidth/2.0, imageHeight/2.0);  // Rotate about center

    // draw scaled imaged with background
    g2D.drawImage(image, 0, 0, this);
  }

  Image image;  // The image
}

That's the complete applet so give it a whirl. It would be a good idea to make the applet dimension larger in the html file – 200x200 say – then you can see the image more clearly. The downside to a larger applet is that it will take more processor time since there are more pixels to process.

How It Works

The basic principles are the same as in the previous example. The thread code in the run() method repaints the imagePanel object every interval milliseconds. The while loop that expedites this increments angle each time, and angle defines the rotation transformation that is applied in the paint() method for the imagePanel object.

We define the rotation with the statement:

g2D.rotate(angle, imageWidth/2.0, imageHeight/2.0);
  // Rotate about center

The transformation specified by this version of the rotate() method is concatenated with the existing transform for the graphics context, which is the AffineTransform object that we create in the init() method for the applet. The transform created by this rotate() call is a composite of a translation to the center of the image, the coordinates of which are defined by the last two arguments, a rotation through angle radians – supplied as the first argument, then a translation back to the original origin point. Thus the rotation is about the center of the image.

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.

 Microsoft Visual Studio 2010 Showcase
 Avaya Developer Showcase
 MSDN Spotlight
 PHP for Windows Showcase
XML error: undefined entity at line 39
advertisement
Receive Articles via our XML/RSS feed
Receive Articles via our XML/RSS feed

JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for Windows 95, 98, ME, NT, 2000 and XP. It's designed to automatically optimize your Windows settings, boosting your Internet connection up to 200%.

Windows 7: From Beta to Final Code in One Year
Google Shows Off Chrome OS, Releases Source
Microsoft Shows Off Silverlight 4, IE9 Plans
Metasploit Expands Vulnerability Test Framework
HyperCard Reborn?
Fedora 12 Takes Aim at Linux Networking
Top Supercomputer Nearly Doubles in Speed
Fedora 12 Linux Tackles Virtualization
Apple Gives iPhone Developers App Status Tracker
Novell Sets OpenSUSE 11.2 Free

Creating Custom Export Filters for StarOffice with XSLT
WPF Wonders: Using DataTemplates
Crystal Reports Family Offers Options for Developers
Avaya Aura Session Manager video
Avaya Aura Overview video
Exploring HTML 5's Audio/Video Multimedia Support
Overriding Virtual Functions? Use C++0x Attributes to Avoid Bugs.
Understanding the Cloud Computing Security Vulnerabilities
Cisco and IBM Target a Greener World
Upgrade to Visual Studio 2010 with the Ultimate Offer

Advertising Info  |   Member Services  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs