Swing/InvertedProgressBar のバックアップ差分(No.3)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/InvertedProgressBar へ行く。
- 1 (2017-10-16 (月) 16:38:13)
- 2 (2018-02-15 (木) 14:23:42)
- 3 (2019-04-26 (金) 18:19:22)
- 4 (2021-02-03 (水) 01:11:14)
- 5 (2024-03-02 (土) 18:59:14)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- 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?export=view&id=1XzVC-95p_4o-iBXzUkOONJ1lHT6qmjImDQ image: https://drive.google.com/uc?id=1XzVC-95p_4o-iBXzUkOONJ1lHT6qmjImDQ --- * 概要 [#summary] `JProgressBar`のインジケータが通常とは逆方向に増加するよう変更します。 #download(https://drive.google.com/uc?export=view&id=1XzVC-95p_4o-iBXzUkOONJ1lHT6qmjImDQ) #download(https://drive.google.com/uc?id=1XzVC-95p_4o-iBXzUkOONJ1lHT6qmjImDQ) * サンプルコード [#sourcecode] #code(link){{ JProgressBar progress = new JProgressBar(m); progress.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); //progress.setStringPainted(true); //progress.setOrientation(SwingConstants.VERTICAL); }} * 解説 [#explanation] - `Orientation`: `SwingConstants.HORIZONTAL` -- 水平スクロールバーの場合、`JProgressBar#setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT)`で右から左に進捗方向を変更可能 -- `JProgressBar`には[https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JSlider.html#setInverted-boolean- 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(...)`をオーバーライドして表示を上下反転した垂直スクロールバー --- 進捗文字列も上下反転してしまう #code{{ 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`で表示を上下反転した垂直スクロールバー --- `JProgressBar#paintComponent(...)`をオーバーライドした場合と同様に進捗文字列も上下反転してしまう --- [[JProgressBarの文字列をJLayerを使って表示する>Swing/ProgressStringLayer]]のように、別の`JLabel`などで進捗文字列を描画すれば回避可能 - その他 -- 以下のようにノブやメモリを非表示、かつ操作不可に設定し、`JSlider#setInverted(true)`で描画を反転した、`JSlider`で代用する方法もある --- [[JSliderのスタイルを変更する>Swing/GradientTrackSlider]] --- [[MouseListenerなどを削除してコンポーネントの入力操作を制限する>Swing/UninstallListeners]] --- [[JSliderの順序を反転>Swing/InvertedSlider]] * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Component.html#setComponentOrientation-java.awt.ComponentOrientation- Component#setComponentOrientation(...) (Java Platform SE 8)] - [[JSliderの順序を反転>Swing/InvertedSlider]] * コメント [#comment] #comment #comment