如何让补间工作正常?

时间:2015-05-15 16:02:19

标签: java repaint tween

我是Tween的新手,所以我用1张图片制作了框架并试图用Tween移动它。代码:

public class Fram extends JFrame {

    public Fram() {
        setSize(700, 500);
        setLocationRelativeTo(null);
        add(new Panol());

        setVisible(true);
    }

    public static void main(String[] args) {
        new Fram();
    }

    public class Panol extends JPanel implements ActionListener {
        Imag img;
        Rectangle r;
        TweenManager tm;
        Tween tween;
        Timer time;
        boolean t;

        public Panol() {

            tm = new TweenManager();
            img = new Imag(new ImageIcon(
                    "C:/Djokix/JAVA/SlideProba/src/AL/Ludi Durenmatt.png"),
                     10, 10, 100, 100);

            Tween.registerAccessor(Imag.class, new ParticleAccessor());

            Tween.to(img, ParticleAccessor.POSITION_XY, 100).target(200, 300)
                    .ease(Quad.INOUT).delay(1000)
                    .start(tm);
        }

        @Override
        public void paint(Graphics g) {

            g.drawImage(img.getImg(), (int) img.x, (int) img.y, (int) img.w,
                    (int) img.h, null);

            tm.update(1);
            repaint();
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            repaint();
        }
    }
}

运动有效,但重复没有,因此图片沿途留下了图像的痕迹。

如果有人知道问题是什么,请帮助!

1 个答案:

答案 0 :(得分:0)

repaint()没有清除JPanel,它只是表明需要再次调用paint方法。在绘画方法中,您应该在绘制之前清除背景。

我会在JPanel构造函数中设置setBackground(Color.BLACK);的背景(白色或黑色),然后在paint方法的顶部调用super.paint(g)。你可能也不需要在你的绘画方法中调用重绘。