27. marts 2005 - 05:08 Der er 3 kommentarer og
1 løsning

Timer problem

Hej...

I et forsøg på at lave noget animation med en timer, der skal vise et billede hvert 40 millisekund, er jeg kommet frem til nedenstående kode. (Jeg er overhoved ikke klar over om det her er den korrekte fremgangsmåde, når man vil animere, eller om der findes en smart klasse et sted).

Problemet besåt i at billederne, der bliver hentet fra en ArrayList ,ikke bliver vist. Kun det sidste billede...

Jeg tænkter at t.start() og t.stop() evt. er placeret forkert.
Eller måske når billederne ikke at blive lagt på jButton1, før timeren kører igen...

Håber, nogen kan hjælpe...tak

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Start extends JFrame implements ActionListener
{
  private BorderLayout borderLayout1 = new BorderLayout();
  private JButton jButton1 = new JButton();
  private Timer t;
  ImageIcon icon1;
  Intro file = new Intro();
  GUI gui;
 
  public Start()
  {
    try
    {
      jbInit();     
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
  private void jbInit() throws Exception
  {
    this.getContentPane().setLayout(borderLayout1);
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    this.setSize(screenSize.width, screenSize.height-30);
    this.setTitle("Merpster");
    this.getContentPane().add(jButton1, BorderLayout.CENTER);
    ImageIcon icon = new ImageIcon("startbillede.gif");
    jButton1.addActionListener(this);     
    jButton1.setIcon(icon);
    jButton1.setVisible(true);
  }
  public void actionPerformed(ActionEvent e)
  { 
    if(e.getSource() == jButton1)
    {
      t = new Timer(10, this);
     
      for (int i = 0; i<file.intro.size() ; i++)
      {
        t.start();     
        icon1 = new ImageIcon((String)file.intro.get(i));
        System.out.println((String)file.intro.get(i));
        jButton1.setIcon(icon1);
        jButton1.setVisible(true); 
        t.stop();
      }   
    } 
    gui =new GUI();
    gui.show();
    this.setVisible(false);
  }   
}
27. marts 2005 - 05:09 #1
P.S.  Jeg har med  System.out.println((String)file.intro.get(i)); at Timeren løber fint igennem.
Avatar billede kalp Novice
27. marts 2005 - 05:59 #2
Jeg er ikke inde i timer komponentet.. men hvis du har sat en tid på timeren så skal du vel ikke have t.stop() med?
måske istedet prøve

for (int i = 0; i<file.intro.size() ; i++)
      {       
        icon1 = new ImageIcon((String)file.intro.get(i));
        System.out.println((String)file.intro.get(i));
        jButton1.setIcon(icon1);
        jButton1.setVisible(true); 
        t.start(); 
      }
Avatar billede mikkelbm Nybegynder
27. marts 2005 - 10:38 #3
Jeg tvivler på at følgende er særlig smart:

t = new Timer(10, this);

Der laver du en ny timer inde i en actionperformed metode. Og den metode smider du med som parameter i den nye Timer. Og endvidere bruges samme actionperformed metode til din knap :)

Jeg vil lave lidt om på den metode. Prøv følgende:


public void actionPerformed(ActionEvent e)

  if(e.getSource() == jButton1)
  {   
    new Thread ()
    {
      public void run ()
      {
        for (int i = 0; i<file.intro.size() ; i++)
        {   
          icon1 = new ImageIcon((String)file.intro.get(i));
          System.out.println((String)file.intro.get(i));
          jButton1.setIcon(icon1);
          try
          {
            Thread.sleep (1000);
          }
          catch (Exception e) {}
        }   
      } 
    }.start();
  }
}

Har ikke testet ovenstående, men det burde virke.
27. marts 2005 - 12:26 #4
Fantastisk mikkelbm

Det virkede lige efter planen. Som sagt var min kodet forsøgt brygget sammen af at læse i andres spørgsmål her i eksperten, en smule fanatasi og en masse hmmm...

Tusind tak....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester