---
category: swing
folder: VerticalProgressBarRotateText
title: JProgressBarが垂直配置の場合その進捗文字列を回転するかを変更する
tags: [JProgressBar, UIManager, UIDefaults, NimbusLookAndFeel]
author: aterai
pubdate: 2023-01-23T06:28:18+09:00
description: NimbusLookAndFeelを設定したJProgressBarが垂直配置の場合その進捗文字列を回転して表示するかを変更します。
image: https://drive.google.com/uc?id=1y_mjj8GE5DxLoNwhPdxPpaNEN5h4965I
---
* 概要 [#summary]
`NimbusLookAndFeel`を設定した`JProgressBar`が垂直配置の場合その進捗文字列を回転して表示するかを変更します。

#download(https://drive.google.com/uc?id=1y_mjj8GE5DxLoNwhPdxPpaNEN5h4965I)

* サンプルコード [#sourcecode]
#code(link){{
// UIManager.put("ProgressBar.rotateText", Boolean.FALSE);
JProgressBar progressBar1 = new JProgressBar(SwingConstants.VERTICAL);
progressBar1.setStringPainted(true);

JProgressBar progressBar2 = new JProgressBar(SwingConstants.VERTICAL);
progressBar2.setStringPainted(true);
UIDefaults d = new UIDefaults();
d.put("ProgressBar.rotateText", Boolean.FALSE);
// NimbusDefaults has a typo in a L&F property - Java Bug System
// https://bugs.openjdk.org/browse/JDK-8285962
// d.put("ProgressBar.vertictalSize", new Dimension(50, 150));
d.put("ProgressBar.verticalSize", new Dimension(50, 150));
progressBar2.putClientProperty("Nimbus.Overrides", d);
progressBar2.putClientProperty("Nimbus.Overrides.InheritDefaults", true);
}}

* 解説 [#explanation]
- `ProgressBar.rotateText`: `Boolean.TRUE`
-- 進捗文字列を`-90`度回転して表示
-- `NimbusLookAndFeel`でのデフォルト
-- 水平`JProgressBar`ではこの設定は無効
-- `MetalLookAndFeel`、`WindowsLookAndFeel`などではこの設定は無効
--- [[JProgressBarの文字列をJLayerを使って表示する>Swing/ProgressStringLayer]]
-- 垂直`JProgressBar`の推奨幅はデフォルトのまま変化しない
-- 垂直`JProgressBar`の推奨幅は進捗文字列が回転して横長になってもデフォルトのまま変化しないので見切れる場合がある
-- 垂直`JProgressBar`の推奨サイズは`typo`があって`d.put("ProgressBar.vertictalSize", new DimensionUIResource(19, 150))`は使用されず、`BasicLookAndFeel`の`"ProgressBar.verticalSize", new DimensionUIResource(12, 146)`が適用されて水平`JProgressBar`と比較すると若干細くなる
--- [https://bugs.openjdk.org/browse/JDK-8285962 [JDK-8285962] NimbusDefaults has a typo in a L&F property - Java Bug System]で`JDK 19`では修正済
- `ProgressBar.rotateText`: `Boolean.FALSE`
-- 進捗文字列は回転せず横組のまま表示
-- `SynthProgressBarUI`のデフォルト
-- 垂直`JProgressBar`の推奨幅は進捗文字列幅とは同期しないので、`UIManager.put("ProgressBar.verticalSize", new Dimension(50, 150))`などで推奨サイズを調節する必要がある

* 参考リンク [#reference]
- [[JProgressBarの文字列をJLayerを使って表示する>Swing/ProgressStringLayer]]
- [https://bugs.openjdk.org/browse/JDK-8285962 [JDK-8285962] NimbusDefaults has a typo in a L&F property - Java Bug System]

* コメント [#comment]
#comment
#comment