概要
パネルのタイルアニメーションで使用するjava.swing.Timer
の数を変更して動作のテストを行います。
Screenshot
Advertisement
サンプルコード
// Timer: 1, ActionListener: 100
class Tile2 extends JComponent {
private int red;
public Tile2(final Random rnd, Timer timer) {
super();
timer.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
red = rnd.nextInt(255);
repaint();
}
});
}
@Override public Dimension getPreferredSize() {
return new Dimension(10, 10);
}
@Override protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(new Color(red, 255 - red, 0));
g.fillRect(0, 0, getWidth(), getHeight());
}
}
View in GitHub: Java, Kotlin解説
Timer: 100
10x10
個のアニメーション用タイル(JComponent
)一つにそれぞれTimer
を生成して使用(その為Timer
も10x10
個存在する)すでに修正済みで上記のサンプルは他と差がないJDK 1.7.0_40
以降で低速JDK 1.8.0
以降はJDK 1.7.0_25
と同等
Timer: 1, ActionListener: 100
Timer
は1
個だけ用意しこれにTimer#addActionListener(...)
メソッドで100
個のActionListener
を追加して使用
Timer: 1, ActionListener: 1
1
個のTimer
を使用しfor
ループで10x10
のラベルの色を変更してアニメーションを実行
参考リンク
- java - javax.swing.Timer slowdown in Java7u40 - Stack Overflow
JDK 1.7.0_25
までは、どれも同じような速度でアニメーションするが、JDK 1.7.0_40
以降はTimer
の数を減らさないと遅くなる(JDK 1.8.0
はJDK 1.7.0_25
と同等に速い)- JDK-7167780 Hang javasoft.sqe.tests.api.javax.swing.Timer.Ctor2Tests - Java Bug Systemの修正が影響していた?