ボタンとして imageIcon を持っているので、ロールオーバーしたときにアニメーション化します。setRolloverIcon(Icon) でアニメーション GIF (ループなし) を使用しようとしました。しかし、ボタンにもう一度カーソルを合わせると、GIFが再び再生されません。ループした gif を使用すると、ランダムなフレームから再生されます。PaintComponent を使用してシェイプまたはイメージをボタンとして描画しようとしましたが、これは正常に動作しますが、setPreferredSize() または setSize() または setMaximumSize() を使用しても、写真でわかるように、ボタンはデフォルトのサイズを使用します (中央)ボタン)。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
。イベントMouseListener
を検出してリセットするには、ボタンにa をアタッチする必要があります...mouseEnter
ImageIcon
于 2013-08-16T11:05:46.883 に答える