• category: swing folder: InvertedProgressBar title: JProgressBarの進捗方向を右から左に変更する tags: [JProgressBar] author: aterai pubdate: 2017-10-16T14:31:34+09:00 description: JProgressBarのインジケータが通常とは逆方向に増加するよう変更します。 image: https://drive.google.com/uc?id=1XzVC-95p_4o-iBXzUkOONJ1lHT6qmjImDQ

概要

JProgressBarのインジケータが通常とは逆方向に増加するよう変更します。

サンプルコード

JProgressBar progress = new JProgressBar(m);
progress.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
// progress.setStringPainted(true);
// progress.setOrientation(SwingConstants.VERTICAL);
View in GitHub: Java, Kotlin

解説

  • Orientation: SwingConstants.HORIZONTAL
    • 水平スクロールバーの場合、JProgressBar#setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT)で右から左に進捗方向を変更可能
    • JProgressBarにはJSlider#setInverted(boolean)のようなメソッドは用意されていない
    • JProgressBar#setStringPainted(true)で進捗文字列を表示した場合、JProgressBar#setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT)に設定していても%100ではなく100%と表示される
  • Orientation: SwingConstants.VERTICAL
    • 左から1番目: デフォルトの垂直スクロールバー
    • 左から2番目: デフォルトの進捗文字列を表示した垂直スクロールバー
    • 左から3番目: JProgressBar#setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT)を設定した垂直スクロールバー
      • 上から下には進捗方向を変更不可でこの設定は無視される
    • 右から2番目: JProgressBar#paintComponent(...)をオーバーライドして表示を上下反転した垂直スクロールバー
      • 進捗文字列も上下反転してしまう
        JProgressBar progress7 = new JProgressBar(m) {
          @Override protected void paintComponent(Graphics g) {
            Graphics2D g2 = (Graphics2D) g.create();
            g2.scale(1, -1);
            g2.translate(0, -getHeight());
            super.paintComponent(g2);
            g2.dispose();
          }
        };
        progress7.setOrientation(SwingConstants.VERTICAL);
        progress7.setStringPainted(true);
        
  • 右から1番目: JLayerで表示を上下反転した垂直スクロールバー

参考リンク

コメント