Swing/IndeterminateRegionPainter のバックアップ(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/IndeterminateRegionPainter へ行く。
- category: swing folder: IndeterminateRegionPainter title: JProgressBarのNimbusLookAndFeelにおける不確定状態アニメーションを変更する tags: [JProgressBar, UIDefaults, Painter, NimbusLookAndFeel, Animation] author: aterai pubdate: 2014-06-30T15:57:20+09:00 description: JProgressBarをNimbusLookAndFeelで使用している場合、その不確定状態アニメーションを変更します。 image:
概要
JProgressBar
をNimbusLookAndFeel
で使用している場合、その不確定状態アニメーションを変更します。
Screenshot
Advertisement
サンプルコード
UIDefaults d = new UIDefaults();
d.put("ProgressBar[Enabled+Indeterminate].foregroundPainter",
new AbstractRegionPainter() {
// ...
private final PaintContext ctx = new PaintContext(
new Insets(5, 5, 5, 5), new Dimension(29, 19), false);
@Override public void doPaint(
Graphics2D g, JComponent c, int width, int height,
Object[] extendedCacheKeys) {
path = decodePath1();
g.setPaint(color17);
g.fill(path);
rect = decodeRect3();
g.setPaint(decodeGradient5(rect));
g.fill(rect);
rect = decodeRect4();
g.setPaint(decodeGradient6(rect));
g.fill(rect);
}
@Override public PaintContext getPaintContext() {
return ctx;
}
// ...
});
progress = new JProgressBar(model);
progress.putClientProperty("Nimbus.Overrides", d);
View in GitHub: Java, Kotlin解説
上記のサンプルでは、NimbusLookAndFeel
でJProgressBar
の不確定状態を表現するアニメーションを変更するために、セルの描画を行うAbstractRegionPainter#doPaint(...)
をオーバーライドしたPainter
を作成し、これをUIDefaults
に設定しています。
AbstractRegionPainter#doPaint(...)
の中身はProgressBarPainter#paintForegroundEnabled(...)
と同等ですが、このメソッドや関連するProgressBarPainter#decodePath1()
などのメソッドはprotected
ではなくすべてprivate
のため、コピーすることで対応しています。