如何将静态图标与动画图标相结合

时间:2016-03-08 21:58:55

标签: java swing icons

我有两个图标,其中一个图标有一个.gif,另一个图标.png。所以我想把这些图标组合起来,将动画片放在另一个上面。

此代码适用于static图标,但是在放置animated时,它不会打印动画。

public class Combine implements Icon{

    private final Icon back;
    private final Icon front;

    public Combine(Icon pBack, Icon pFront) {
        this.back= pBack;
        this.front= pFront;
    }

    @Override
    public int getIconHeight() {
        return Math.max(front.getIconHeight(), back.getIconHeight());
    }

    @Override
    public int getIconWidth() {
        return Math.max(front.getIconWidth(), back.getIconWidth());
    }

    @Override
    public void paintIcon(Component arg0, Graphics arg1, int arg2, int arg3) {
        back.paintIcon(arg0, arg1, arg2, arg3);
        front.paintIcon(arg0, arg1, arg2, arg3);
    }

}

我正在使用这个加载图标:

Icon back = new ImageIcon(Toolkit.getDefaultToolkit().createImage(MyClass.class.getResource(source)));
Icon front = new ImageIcon(Toolkit.getDefaultToolkit().createImage(MyClass.class.getResource(source)));

修改

我想使用JButton图标的图标。

2 个答案:

答案 0 :(得分:1)

  

其中一个有.gif作为图标,

我认为您需要使用JLabel来制作动画。这就是JLabel负责在动画时重新绘制Icon。

尝试在两个JLabel中显示两个图标:

JLabel front = new JLabel( new ImageIcon(...) );
JLabel back = new JLabel( new ImageIcon(...) );
back.setLayout( new GridBagLayout() );
back.add(front, new GridBagConstraints());

前图标应位于后方图标的中心位置。

您可能还想查看Compound Icon这是一个更灵活的班级版本,它允许您将两个或多个图标组合成一个。

答案 1 :(得分:1)

您需要告诉动画ImageIcon在新帧可用时通知JButton:

front.setImageObserver(button);

有关详细信息,请参阅ImageIcon.setImageObserver

顺便说一句,ImageIcon有一个构造函数,它接受一个URL:

ImageIcon back = new ImageIcon(MyClass.class.getResource(backSource));
ImageIcon front = new ImageIcon(MyClass.class.getResource(frontSource));