TITLE:Cursorのアニメーション
#navi(../)
#tags(Cursor, Animation)
RIGHT:Posted by &author(aterai); at 2006-05-01
* Cursorのアニメーション [#j7158da4]
マウスカーソルをアニメーションさせます。

#download
#ref(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTHkbNXdwI/AAAAAAAAARY/RzDAT8xyR3c/s800/AnimatedCursor.png)

** サンプルコード [#h16203df]
#code(link){{
list[0] = tk.createCustomCursor(tk.createImage(url00), p, "00");
list[1] = tk.createCustomCursor(tk.createImage(url01), p, "01");
list[2] = tk.createCustomCursor(tk.createImage(url02), p, "02");
setCursor(list[0]);
animator = new javax.swing.Timer(100, new ActionListener() {
  private int count = 0;
  @Override public void actionPerformed(ActionEvent e) {
    setCursor(list[count]);
    count = (count<list.length-1)?count+1:0;
  }
});
JButton button = new JButton(new AbstractAction("スタート") {
  @Override public void actionPerformed(ActionEvent e) {
    JButton button = (JButton)e.getSource();
    if(animator.isRunning()) {
      button.setText("スタート");
      animator.stop();
    }else{
      button.setText("ストップ");
      animator.start();
    }
  }
});
}}

** 解説 [#b3798cf8]
上記のサンプルでは、ボタンをクリックすると、パネル上にあるカーソルがアニメーションするようになっています。`3`枚の透過`png`ファイルをコマにして、`Timer`で順番にこれを切り替えています。

各コマは、[http://www11.atwiki.jp/vippointer/pages/54.html ぶーん(通常の選択.ani、VIPポインター)]から、[http://www.vector.co.jp/soft/win95/amuse/se195017.html ANIめーかー]を使って生成しています。

** 参考リンク [#bf958cfb]
- [http://www11.atwiki.jp/vippointer/ VIPポインター@Wiki - トップページ]
- [http://www.vector.co.jp/soft/win95/amuse/se195017.html ANIめーかー(Windows95/98/Me/アミューズメント)]
- [[Cursorオブジェクトの生成>Swing/CustomCursor]]
- [http://www.oreilly.co.jp/books/4873112788/download.html oreilly.co.jp -- Online Catalog: Java Swing Hacks]

** コメント [#q9ef944e]
- `Cursor`に用いる`png`ファイルは、フルカラー(`24`ビット)ではなく`256`色にしておかないと、うまく透過できないようです。もしかしたら自分の`PC`の画面の色が`16`ビットになっているせいかもしれません。 -- [[aterai]] &new{2006-07-11 (火) 12:41:59};
-- `32`ビットにしてもだめみたいです。 -- [[aterai]] &new{2006-07-25 (火) 16:53:29};
-- 追記: `JDK 6`なら、フルカラーでも問題なく透過できるようです。[http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6388546 Bug ID: 6388546 PNG with transparent background doesn't render correctly] -- [[aterai]] &new{2008-07-28 (月) 16:27:56};
- `Windows XP`で、カーソルを`Animated GIF`ファイルから生成(`Toolkit.getDefaultToolkit().createCustomCursor`)しようとすると、 %%落ちる?%% `Ubuntu`だと、アニメーションはしないけど、ちゃんと画像がカーソルになる。 -- [[aterai]] &new{2007-05-08 (火) 14:25:37};
-- デッドロック? -- [[aterai]] &new{2008-05-07 (水) 19:38:38};
-- メモ: [http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4343270 Bug ID: 4343270 Toolkit.createCustomCursor() hangs the VM under Win NT]、[http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4939855 Bug ID: 4939855 Please allow Toolkit.createCustomCursor() to accept multi-frame images] -- [[aterai]] &new{2008-09-01 (月) 23:18:57};
-- よくみたら、[http://docs.oracle.com/javase/jp/6/api/java/awt/Toolkit.html#createCustomCursor(java.awt.Image,%20java.awt.Point,%20java.lang.String) Toolkit#createCustomCursor]に、「マルチフレームイメージは無効で、このメソッドがハングすることがあります。」と注意書きがあった(`1.4.2`のドキュメントから?)。 -- [[aterai]] &new{2010-01-19 (火) 17:03:17};

#comment