JProgressBarの不確定モードアニメーションを一方向に変更する
Total: 1824
, Today: 1
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
MetalLookAndFeel
を適用したJProgressBar
の不確定モードアニメーションを跳ね返りではなく左から右への一方向繰り返しに変更します。
Screenshot
Advertisement
サンプルコード
class OneDirectionIndeterminateProgressBarUI extends BasicProgressBarUI {
// @see com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java
@Override protected Rectangle getBox(Rectangle r) {
Rectangle rect = super.getBox(r);
int framecount = getFrameCount() / 2;
int currentFrame = getAnimationIndex() % framecount;
if (progressBar.getOrientation() == JProgressBar.VERTICAL) {
int len = progressBar.getHeight();
len += rect.height * 2; // add 2x for the trails
double delta = len / (double) framecount;
rect.y = (int) (delta * currentFrame);
} else {
int len = progressBar.getWidth();
len += rect.width * 2; // add 2x for the trails
double delta = len / (double) framecount;
rect.x = (int) (delta * currentFrame);
}
return rect;
}
}
View in GitHub: Java, Kotlin解説
- 上: デフォルト
BasicLookAndFeel
やMetalLookAndFeel
の不確定モードは矩形が左右に往復するアニメーションがデフォルト
- 下:
Windows
風Windows
環境での不確定モードは矩形が左から右への一方向を繰り返すアニメーションがデフォルトWindowsProgressBarUI
のgetBox(...)
メソッドを参考にBasicProgressBarUI#getBox(...)
メソッドをオーバーライド- フレーム数を半分にして「行き」分だけアニメーションを表示する
- 元の
WindowsProgressBarUI
でJProgressBar#setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT)
を設定しても不確定モードのアニメーションは右から左へには変化しない
参考リンク
- Java swing indeterminate JProgressBar starting from the left when reaching end instead of bouncing - Stack Overflow
- JProgressBarの不確定状態でのアニメーションパターンを変更する
JProgressBar
全体が不確定モードでアニメーションするよう変更するサンプル
- JProgressBarのNimbusLookAndFeelにおける不確定状態アニメーションを変更する
NimbusLookAndFeel
で不確定モードのアニメーションを変更するサンプル
- JProgressBarの進捗方向を右から左に変更する