Swing/IndeterminateRegionPainter の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/IndeterminateRegionPainter へ行く。
- 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: https://lh5.googleusercontent.com/-L28C52EISs4/U7AofjsiWqI/AAAAAAAACIo/OHDDAqKKk6E/s800/IndeterminateRegionPainter.png --- * 概要 [#summary] `JProgressBar`を`NimbusLookAndFeel`で使用している場合、その不確定状態アニメーションを変更します。 #download(https://lh5.googleusercontent.com/-L28C52EISs4/U7AofjsiWqI/AAAAAAAACIo/OHDDAqKKk6E/s800/IndeterminateRegionPainter.png) * サンプルコード [#sourcecode] #code(link){{ 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); }} * 解説 [#explanation] 上記のサンプルでは、`NimbusLookAndFeel`で`JProgressBar`の不確定状態を表現するアニメーションを変更するために、セルの描画を行う`AbstractRegionPainter#doPaint(...)`をオーバーライドした`Painter`を作成し、これを`UIDefaults`に設定しています。 `AbstractRegionPainter#doPaint(...)`の中身は`ProgressBarPainter#paintForegroundEnabled(...)`と同等ですが、このメソッドや関連する`ProgressBarPainter#decodePath1()`などのメソッドは`protected`ではなくすべて`private`のため、コピーすることで対応しています。 - `AbstractRegionPainter#doPaint(...)`の中身は`ProgressBarPainter#paintForegroundEnabled(...)`と同等だが、このメソッドや関連する`ProgressBarPainter#decodePath1()`などのメソッドは`protected`ではなくすべて`private`のためペインターごとコピーすることで対応 * 参考リンク [#reference] - [[JProgressBarの不確定状態でのアニメーションパターンを変更する>Swing/StripedProgressBar]] * コメント [#comment] #comment #comment