JProgressBarのNimbusLookAndFeelにおける不確定状態アニメーションを変更する
Total: 3883
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
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
のためペインターごとコピーすることで対応