我有一个 imageIcon 作为按钮,现在我会在你翻转时为它设置动画。我尝试在 setRolloverIcon(Icon) 上使用动画 gif(无循环)。但是当我再次将鼠标悬停在按钮上时,gif 不再播放。当我使用循环 gif 时,它会从随机帧播放它。我尝试使用 paintComponent 将 Shape 或图像绘制为 Button,效果很好,但即使我使用 setPreferredSize() 或 setSize() 或 setMaximumSize() Button 使用其默认大小,如图所示(中间按钮)。我正在使用 GroupLayout,这可能是问题吗?
问问题
3198 次
1 回答
5
似乎对我来说工作得很好......
我使用了以下图标...(png和gif)...
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class AnimatedButton {
public static void main(String[] args) {
new AnimatedButton();
}
public AnimatedButton() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private ImageIcon animatedGif;
public TestPane() {
setLayout(new GridBagLayout());
JButton btn = new JButton(new ImageIcon("WildPony.png"));
btn.setRolloverEnabled(true);
animatedGif = new ImageIcon("ajax-loader.gif");
btn.setRolloverIcon(animatedGif);
add(btn);
btn.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
animatedGif.getImage().flush();
}
});
}
}
}
我刚刚意识到您使用的是非循环 gif。这意味着您将需要尝试“重置”以重新开始播放。
尝试使用类似的东西icon.getImage().flush();
,icon
你的ImageIcon
. 您将不得不将 a 附加MouseListener
到按钮上以检测mouseEnter
事件并重置ImageIcon
...
于 2013-08-16T11:05:46.883 回答