2015-02-05 47 views
0

我想做一个简单的动画使用计时器,添加和删除按钮,但我不知道我在哪里错了。另外我添加了两个打印只是为了验证。他们打印正确。我还观察到,如果我删除removeAll()方法,它会添加按钮。JAVA时间动画

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

import javax.swing.*; 


public class Animation extends JPanel{ 
    JLabel l1 = new JLabel(new ImageIcon("tom1.png")); 
    JLabel l2 = new JLabel(new ImageIcon("tom2.png")); 
    JLabel l3 = new JLabel(new ImageIcon("tom3.png")); 
    JLabel l4 = new JLabel(new ImageIcon("tom4.png")); 
    JLabel l5 = new JLabel(new ImageIcon("tom5.png")); 
    JButton b1 = new JButton("HAHA"); 
    JButton b2 = new JButton(); 
    JPanel panel = new JPanel(); 

    public Animation(){ 
     setLayout(new BorderLayout()); 
     Timer time = new Timer(1000,new ActionListener(){ 
      public void actionPerformed(ActionEvent e){ 
       System.out.println("paint"); 
       add(b1, BorderLayout.CENTER); 
       repaint(); 
       revalidate(); 
       System.out.println("remove"); 
       removeAll(); 
       repaint(); 
       revalidate(); 

      } 
     }); 
     time.start(); 



    } 


    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.add(new Animation()); 
     frame.setVisible(true); 
     frame.setSize(1000,400); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 



} 
+0

你要求添加按钮,然后立即你removeAll()'。如果按钮出现,它将是您永远不会注意到的最闪烁的闪烁。你期望发生什么? – dcsohl 2015-02-05 18:42:48

+0

然后我可以做什么? – zaa 2015-02-05 18:48:23

+0

@zaa你想让按钮闪烁? – 2015-02-05 18:52:53

回答

1

就像在评论中说,要添加的按钮,然后取出真的后不久...

为了使按钮apprear一秒钟,dissapear其他的,你可以做一个标志,在定时器中做一件事,然后做另一件事。 你可以这样做:

package test; 

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

import javax.swing.*; 

public class Animation extends JPanel { 
    JLabel l1 = new JLabel(new ImageIcon("tom1.png")); 
    JLabel l2 = new JLabel(new ImageIcon("tom2.png")); 
    JLabel l3 = new JLabel(new ImageIcon("tom3.png")); 
    JLabel l4 = new JLabel(new ImageIcon("tom4.png")); 
    JLabel l5 = new JLabel(new ImageIcon("tom5.png")); 
    JButton b1 = new JButton("HAHA"); 
    JButton b2 = new JButton(); 
    JPanel panel = new JPanel(); 
    boolean isthere = false; 

    public Animation() { 
     setLayout(new BorderLayout()); 
     Timer time = new Timer(1000, new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 

       if (!isthere) { 
        System.out.println("paint"); 
        add(b1, BorderLayout.CENTER); 
        repaint(); 
        revalidate(); 

        isthere = !isthere; 
       } else { 

        System.out.println("remove"); 
        removeAll(); 
        repaint(); 
        revalidate(); 
        isthere = !isthere; 
       } 

      } 
     }); 
     time.start(); 

    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.add(new Animation()); 
     frame.setVisible(true); 
     frame.setSize(1000, 400); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 

} 
+0

或者检查按钮的“父”属性。首先重新验证容器,然后重新绘制它也更好 – MadProgrammer 2015-02-05 20:18:20

+0

谢谢!工作。 – zaa 2015-02-05 20:24:00

+0

我该如何阻止它?如果我把time.stop()放在其中一个循环中,它说时间可能没有被初始化。 – zaa 2015-02-05 21:07:59