JSliderの上部に現在値を常時表示する
Total: 1446
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JSlider
のノブの上部などに現在値を常時表示するよう設定します。
Screenshot
Advertisement
サンプルコード
// UIManager.put("Slider.paintValue", Boolean.TRUE)
JSlider slider = new JSlider();
slider.setPaintTrack(true);
slider.setPaintLabels(false);
slider.setPaintTicks(true);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(5);
UIDefaults d = UIManager.getLookAndFeelDefaults();
d.put("Slider.paintValue", Boolean.TRUE);
slider.putClientProperty("Nimbus.Overrides", d);
View in GitHub: Java, Kotlin解説
Default
SynthLookAndFeel
を継承するLookAndFeel
はSlider.paintValue
でJSlider
の上部に現在値を表示可能BasicLookAndFeel
を継承するMetalLookAndFeel
などではSlider.paintValue
の設定は無効でこの設定でのJSlider
の現在値表示は不可能- 水平
JSlider
の場合はノブの上に動的に表示、垂直JSlider
の場合はノブではなくトラックの上に固定で表示 Slider.paintValue
のGTKLookAndFeel
でのデフォルトはtrue
で現在値表示ありSlider.paintValue
のNimbusLookAndFeel
でのデフォルトはfalse
で現在値表示なし
Slider.paintValue
Slider.paintValue
をtrue
に設定したUIDefaults
をJSlider#putClientProperty("Nimbus.Overrides", UIDefaults)
で設定して現在値を表示UIManager.put("Slider.paintValue", Boolean.TRUE)
ですべてのJSlider
の現在値表示を変更することも可能Slider.paintValue
がtrue
でJSlider
の現在値表示する場合、あとで親コンテナのレイアウトを再評価しないとJSlider
のサイズが正しく描画されないバグ?がある- 上記のサンプルでは
EventQueue.invokeLater(...)
を使用してあとでrevalidate()
とrepaint()
を実行して回避
- 上記のサンプルでは
Show ToolTip
JToolTip
を使用してノブのドラッグ中のみ現在値を表示- JSliderのノブをドラッグ中にToolTipで値を表示
参考リンク
- JPopupMenuに追加したJSliderの表示・非表示をチェックボックスで切り替える
- JSliderのノブをドラッグ中にToolTipで値を表示
- Nimbus Defaults (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)