Swing/AnimeIcon のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/AnimeIcon へ行く。
- 1 (2007-03-26 (月) 00:29:10)
- 2 (2007-03-28 (水) 18:41:47)
- 3 (2007-04-10 (火) 15:45:54)
- 4 (2007-04-16 (月) 12:45:57)
- 5 (2007-04-17 (火) 18:27:40)
- 6 (2007-05-09 (水) 20:01:26)
- 7 (2007-07-11 (水) 23:49:44)
- 8 (2007-07-24 (火) 22:43:03)
- 9 (2007-07-25 (水) 01:39:27)
- 10 (2007-07-25 (水) 12:41:27)
- 11 (2009-11-26 (木) 15:53:44)
- 12 (2009-12-17 (木) 01:44:29)
- 13 (2009-12-17 (木) 11:07:18)
- 14 (2010-03-08 (月) 13:13:39)
- 15 (2010-12-12 (日) 23:20:10)
- 16 (2011-04-29 (金) 15:31:12)
- 17 (2013-03-13 (水) 15:39:14)
- 18 (2013-08-17 (土) 01:17:02)
- 19 (2013-08-17 (土) 05:01:00)
- 20 (2014-03-18 (火) 18:50:31)
- 21 (2015-01-20 (火) 15:44:29)
- 22 (2015-03-13 (金) 13:42:47)
- 23 (2016-05-26 (木) 14:28:17)
- 24 (2016-08-17 (水) 18:46:54)
- 25 (2017-03-29 (水) 19:36:44)
- 26 (2017-03-30 (木) 14:10:40)
- 27 (2017-10-18 (水) 13:38:25)
- 28 (2019-04-26 (金) 18:20:51)
- 29 (2019-05-11 (土) 15:55:26)
- 30 (2021-02-09 (火) 19:11:27)
- 31 (2024-02-02 (金) 11:37:11)
TITLE:Timerでアニメーションするアイコンを作成
Timerでアニメーションするアイコンを作成
編集者:Terai Atsuhiro
作成日:2006-03-13
更新日:2024-02-02 (金) 11:37:11
概要
javax.swing.Timerを使って、アニメーションするアイコンを作成します。
#screenshot
サンプルコード
class AnimeIcon extends JComponent implements ActionListener {
private boolean flag = false;
private final javax.swing.Timer animator;
private final Vector list = new Vector();
public void animationStart() {
flag = true;
animator.start();
}
public void animationStop() {
flag = false;
animator.stop();
}
public AnimeIcon() {
super();
animator = new javax.swing.Timer(100, this);
double r = 2.0d;
double sx = 1.0d;
double sy = 1.0d;
list.addElement(new Ellipse2D.Double(sx+3*r, sy+0*r, 2*r, 2*r));
list.addElement(new Ellipse2D.Double(sx+5*r, sy+1*r, 2*r, 2*r));
list.addElement(new Ellipse2D.Double(sx+6*r, sy+3*r, 2*r, 2*r));
list.addElement(new Ellipse2D.Double(sx+5*r, sy+5*r, 2*r, 2*r));
list.addElement(new Ellipse2D.Double(sx+3*r, sy+6*r, 2*r, 2*r));
list.addElement(new Ellipse2D.Double(sx+1*r, sy+5*r, 2*r, 2*r));
list.addElement(new Ellipse2D.Double(sx+0*r, sy+3*r, 2*r, 2*r));
list.addElement(new Ellipse2D.Double(sx+1*r, sy+1*r, 2*r, 2*r));
int iw = (int)(r*8)+(int)(sx*2);
int ih = (int)(r*8)+(int)(sy*2);
setPreferredSize(new Dimension(iw, ih));
}
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(getBackground());
g2d.fillRect(0, 0, getWidth(), getHeight());
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(cColor);
float alpha = 0.0f;
Iterator it = list.iterator();
while(it.hasNext()) {
alpha = (flag)?alpha+0.1f:0.5f;
g2d.setComposite(AlphaComposite.getInstance(
AlphaComposite.SRC_OVER, alpha));
g2d.fill((Shape)it.next());
}
}
public void actionPerformed(ActionEvent e) {
list.addElement(list.remove(0));
repaint();
}
}
- &jnlp;
- &jar;
- &zip;
解説
上記のサンプルでは、円のアルファ値が変化するFireFox風のアニメーションアイコンを作成しています。
JTextAreaに表示している作業状況はダミーで、実際はThread.sleep()で時間を稼いでいるだけです。
円がいびつだったので、アンチエイリアスをかけています。Java SE 6 では、「小さな円(曲線)が円に見えなかった問題」が解消されているようです(参考)。
コメント
- 色の濃い円が時計回りに回転するように変更しました。 -- terai