我有两个图标,其中一个图标有一个.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图标的图标。
答案 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));