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 / General / November 2006

Tip: Looking for answers? Try searching our database.

simple animation question (I hope)

Thread view: 
John Doe - 19 Nov 2006 00:44 GMT
Hi. Lets say I have 3 images (image1.jpg, image2,jpg and image3.jpg).
What is the simplest way to show image1.jpg in a table cell, then 1
second later - image2.jpg, then 1 second later - image3.jpg?

I'm trying to create a time counter showing elapsed time, or maybe time
left in a graphical way, say as a bar that moves, or maybe a little dot
that moves each second. I would like to show that animation in a table
cell. Something like that.
Knute Johnson - 19 Nov 2006 05:27 GMT
> Hi. Lets say I have 3 images (image1.jpg, image2,jpg and image3.jpg).
> What is the simplest way to show image1.jpg in a table cell, then 1
[quoted text clipped - 4 lines]
> that moves each second. I would like to show that animation in a table
> cell. Something like that.

import java.awt.*;
import java.awt.event.*;

public class TimePanel extends Panel implements Runnable {
    int msec;
    double percent;

    public TimePanel(int msec) {
        super();

        this.msec = msec;

        new Thread(this).start();
    }

    public void run() {
        long stop = System.currentTimeMillis() + msec;
        while (stop > System.currentTimeMillis()) {
            try {
                Thread.sleep(10);
            } catch (InterruptedException ie) { }
            percent = 1.0 - (stop - System.currentTimeMillis()) /
(double)msec;
            repaint();
        }
        percent = 0.0;
        repaint();
        new Thread(this).start();
    }

    public void update(Graphics g) {
        paint(g);
    }

    public void paint(Graphics g) {
        if (percent == 0.0) {
            g.setColor(Color.WHITE);
            g.fillRect(0,0,getWidth(),getHeight());
        }

        g.setColor(Color.BLUE);
        int width = (int)(getWidth() * percent);
        g.fillRect(0,0,width,getHeight());

        String str = Integer.toString(msec) + " msec";
        FontMetrics fm = g.getFontMetrics();
        int strWidth = fm.stringWidth(str);
        g.setColor(Color.WHITE);
        g.drawString(str,(getWidth() - strWidth)/2,
         (getHeight() + fm.getHeight() / 2) / 2);
    }

    public static void main(String[] args) {
        Frame f = new Frame();
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        });
        TimePanel tp = new TimePanel(10000);
        f.add(tp);
        f.setSize(120,80);
        f.setVisible(true);
    }
}

Signature

Knute Johnson
email s/nospam/knute/

hiwa - 19 Nov 2006 05:38 GMT
> Hi. Lets say I have 3 images (image1.jpg, image2,jpg and image3.jpg).
> What is the simplest way to show image1.jpg in a table cell, then 1
[quoted text clipped - 4 lines]
> that moves each second. I would like to show that animation in a table
> cell. Something like that.
/*
With an immense help from guru camickr as shown on:
http://forum.java.sun.com/thread.jspa?messageID=4472998
*/
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;

public class AnimeTableCell{
 JFrame frame;
 Container con;
 JScrollPane scp;
 JTable table;
 AnimePanel anp, ant;
 Image[] images;

 public AnimeTableCell(){
   frame = new JFrame();
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   con = frame.getContentPane();

   images = new Image[4];
   images[0] = new ImageIcon("images/a.png").getImage();
   images[1] = new ImageIcon("images/b.png").getImage();
   images[2] = new ImageIcon("images/c.png").getImage();
   images[3] = new ImageIcon("images/d.png").getImage();

   table = new JTable(10, 6){
     public Component prepareRenderer
      (TableCellRenderer renderer, int row, int column){
       Component c = super.prepareRenderer(renderer, row, column);
       if (row == 3 && column == 2){
         if (ant != null){
           c = ant;
         }
       }
       return c;
     }
   };
   scp = new JScrollPane(table);
   con.add(scp, BorderLayout.CENTER);
   ant = new AnimePanel(images, 500, true); //for cell renderer,
repaint table

   anp = new AnimePanel(images, 500, false); //this doesn't repaint
table
   con.add(anp, BorderLayout.SOUTH);

   frame.setSize(400, 400);
   frame.setVisible(true);
 }

 class AnimePanel extends JPanel implements ActionListener{
   Image[] imgs;
   int delay;
   boolean trepaint;
   int range;
   int idx;
   Timer timer;
   AbstractTableModel atb;

   public AnimePanel(Image[] ima, int de, boolean r){
     setPreferredSize
       (new Dimension(ima[0].getWidth(this), ima[0].getHeight(this)));
     imgs = ima;
     delay = de;
     trepaint = r;

     range = ima.length - 1;
     idx = 0;
     atb = (AbstractTableModel)(table.getModel());
     timer = new Timer(delay, this);
     timer.start();
   }

   public void actionPerformed(ActionEvent e){
     ++idx;
     if (idx > range){
       idx = 0;
     }
     repaint();
     if (table != null && trepaint){
       atb.fireTableCellUpdated(3, 2);
     }
   }

   public void paintComponent(Graphics g){
     super.paintComponent(g);
     g.drawImage(imgs[idx], 0, 0, this);
   }
 }

 public static void main(String[] args){
   new AnimeTableCell();
 }
}
Andrew Thompson - 19 Nov 2006 07:52 GMT
"..and now for something completely different"
(to the fine answers, already presented)

> I'm trying to create a time counter showing elapsed time, or maybe time
> left in a graphical way, say as a bar that moves, ..

<http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JProgressBar.html>

Andrew T.
hiwa - 19 Nov 2006 09:46 GMT
> "..and now for something completely different"
> (to the fine answers, already presented)
[quoted text clipped - 5 lines]
>
> Andrew T.
As you might already know it well, rendering JProgressBar as a table
cell is not a simple task to write. Cell renderer component is not a
real component that would do real animation of incremental bar
painting. It's a static snapshot, or a rubber-stamp-sort-of.
Andrew Thompson - 19 Nov 2006 10:19 GMT
(re. table cells)

> > > I'm trying to create a time counter showing elapsed time, or maybe time
> > > left in a graphical way, say as a bar that moves, ..
> >
> > <http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JProgressBar.html>
..
> As you might already know it well, rendering JProgressBar as a table
> cell is not a simple task to write.

Actually - I was unaware of it.  Thanks for the tip.

..were you aware that 'best trimming' practices would
suggest that 'sigs.'* or signatures should be trimmed from
replies?    ;-)

Andrew T.    <-  *'sig.'
Simon Brooke - 19 Nov 2006 12:48 GMT
> Hi. Lets say I have 3 images (image1.jpg, image2,jpg and image3.jpg).
> What is the simplest way to show image1.jpg in a table cell, then 1
[quoted text clipped - 4 lines]
> that moves each second. I would like to show that animation in a table
> cell. Something like that.

This question has nothing whatever to do with Java; you would be better
asking it in a JavaScript group.

Java and JavaScript are completely different languages. The confusion of
names arises out of an incredibly stupid marketing decision.

Signature

simon@jasmine.org.uk (Simon Brooke) http://www.jasmine.org.uk/~simon/
               ;; If Python is executable pseudocode,
               ;; then Perl is executable line noise
                               -- seen on Slashdot.

Daniel Pitts - 19 Nov 2006 18:57 GMT
> > Hi. Lets say I have 3 images (image1.jpg, image2,jpg and image3.jpg).
> > What is the simplest way to show image1.jpg in a table cell, then 1
[quoted text clipped - 10 lines]
> Java and JavaScript are completely different languages. The confusion of
> names arises out of an incredibly stupid marketing decision.

I have to ask, what makes you think he specifically means an HTML
table?  Although it would have been better for him to be more specific,
I think from the context everyone assumed he meant a JTable.

Indeed, Java and JavaScript are different, but I think his quesion was
appropriate.


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.