Swing/AnimatedCursor のバックアップの現在との差分(No.12)
TITLE:Cursorのアニメーション
Posted by aterai at 2006-05-01
Cursorのアニメーション
マウスカーソルをアニメーションさせます。- category: swing folder: AnimatedCursor title: Cursorのアニメーション tags: [Cursor, Animation] author: aterai pubdate: 2006-05-01T12:35:56+09:00 description: Timerを使ったCursorの切り替えで、マウスポインタのループアニメーションを行います。 image:
概要
Timer
を使ったCursor
の切り替えで、マウスポインタのループアニメーションを行います。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spandel
list[0] = tk.createCustomCursor(tk.createImage(url00), p, "00");
#spanend
#spandel
list[1] = tk.createCustomCursor(tk.createImage(url01), p, "01");
#spanend
#spandel
list[2] = tk.createCustomCursor(tk.createImage(url02), p, "02");
#spanend
#spandel
setCursor(list[0]);
#spanend
#spandel
animator = new javax.swing.Timer(100, new ActionListener() {
#spanend
private int count = 0;
public void actionPerformed(ActionEvent e) {
setCursor(list[count]);
count = (count<list.length-1)?count+1:0;
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
Toolkit tk = Toolkit.getDefaultToolkit();
#spanend
#spanadd
list[0] = tk.createCustomCursor(tk.createImage(url00), pt, "00");
#spanend
#spanadd
list[1] = tk.createCustomCursor(tk.createImage(url01), pt, "01");
#spanend
#spanadd
list[2] = tk.createCustomCursor(tk.createImage(url02), pt, "02");
#spanend
#spanadd
animator = new Timer(100, new ActionListener() {
#spanend
private int counter;
@Override public void actionPerformed(ActionEvent e) {
button.setCursor(list[counter]);
counter = (counter + 1) % list.length;
}
});
#spandel
JButton button = new JButton(new AbstractAction("スタート") {
#spanend
public void actionPerformed(ActionEvent e) {
JButton button = (JButton)e.getSource();
if(animator.isRunning()) {
button.setText("スタート");
#spanadd
button = new JButton(new AbstractAction("Start") {
#spanend
@Override public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
if (animator.isRunning()) {
b.setText("Start");
animator.stop();
}else{
button.setText("ストップ");
} else {
b.setText("Stop");
animator.start();
}
}
});
解説
上記のサンプルでは、ボタンをクリックすると、パネル上にあるカーソルがアニメーションするようになっています。3枚の透過pngファイルをコマにして、Timerで順番にこれを切り替えています。解説
-
JButton
のクリックでパネル上にあるカーソルのアニメーションを開始 -
3
枚の透過png
ファイルをコマにしてTimer
で順番にこれを切り替え
参考リンク
- VIPポインタ@Wiki - トップページ
- このサンプルの各コマはぶーん(通常の選択.ani、VIPポインタ)からANIめーかーを使って生成
- ANIめーかー(Windows95/98/Me/アミューズメント)
- Cursorオブジェクトの生成
- oreilly.co.jp -- Online Catalog: Java Swing Hacks
- Toolkit (Java Platform SE 8)
参考リンク
- VIPポインター@Wiki - トップページ
- ANIめーかー(Windows95/98/Me/アミューズメント)
- Cursorオブジェクトの生成
- oreilly.co.jp -- Online Catalog: Java Swing Hacks
コメント
-
Cursor
に用いるpng
ファイルは、フルカラー(24
ビット)ではなく256
色にしておかないと、うまく透過できないようです。もしかしたら自分のPC
の画面の色が16
ビットになっているせいかもしれません。 -- aterai-
32
ビットにしてもだめみたいです。 -- aterai - 追記:
JDK 6
なら、フルカラーでも問題なく透過できるようです。[JDK-6388546] PNG with transparent background doesn't render correctly - Java Bug System -- aterai
-
-
Windows XP
で、カーソルをAnimated GIF
ファイルから生成(Toolkit.getDefaultToolkit().createCustomCursor
)しようとすると、落ちる?Ubuntu
だと、アニメーションはしないけど、ちゃんと画像がカーソルになる。 -- aterai- デッドロック? -- aterai
- メモ: [JDK-4343270] Toolkit.createCustomCursor() hangs the VM under Win NT - Java Bug System、[JDK-4939855] Please allow Toolkit.createCustomCursor() to accept multi-frame images - Java Bug System -- aterai
- よくみたら、Toolkit#createCustomCursor(...)に、「マルチフレームイメージは無効で、このメソッドがハングすることがあります。」と注意書きが存在する(
1.4.2
のドキュメントから?)。 -- aterai
コメント
- Cursorに用いるpngファイルは、フルカラー(24ビット)ではなく256色にしておかないと、うまく透過できないようです。もしかしたら自分のPCの画面の色が16ビットになっているせいかもしれません。 -- aterai
- 32ビットにしてもだめみたいです。 -- aterai
- 追記: JDK 6 なら、フルカラーでも問題なく透過できるようです。Bug ID: 6388546 PNG with transparent background doesn't render correctly -- aterai
- Windows XP で、カーソルをAnimated GIF ファイルから生成(Toolkit.getDefaultToolkit().createCustomCursor)しようとすると、
落ちる? Ubuntuだと、アニメーションはしないけど、ちゃんと画像がカーソルになる。 -- aterai- デッドロック? -- aterai
- メモ: Bug ID: 4343270 Toolkit.createCustomCursor() hangs the VM under Win NT、Bug ID: 4939855 Please allow Toolkit.createCustomCursor() to accept multi-frame images -- aterai
- よくみたら、java.awt.Point, java.lang.String) Toolkit#createCustomCursorに、「マルチフレームイメージは無効で、このメソッドがハングすることがあります。」と注意書きがあった*1。 -- aterai