Swing/SliderFocusBorder のバックアップの現在との差分(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/SliderFocusBorder へ行く。
- 1 (2018-02-15 (木) 14:23:42)
- 2 (2019-07-05 (金) 14:33:03)
- 3 (2019-09-05 (木) 19:14:42)
- 4 (2021-04-30 (金) 15:22:10)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: SliderFocusBorder title: JSliderのFocusBorderを非表示に設定する tags: [JSlider, Focus, Border, WindowsLookAndFeel] author: aterai pubdate: 2017-11-27T15:20:49+09:00 description: WindowsLookAndFeelを使用するJSliderで、点線のFocusBorderを非表示に設定します。 image: https://drive.google.com/uc?export=view&id=1zvmXqQPcE3P84DbjDk0vFmBympd7es24Gw image: https://drive.google.com/uc?id=1zvmXqQPcE3P84DbjDk0vFmBympd7es24Gw --- * 概要 [#summary] `WindowsLookAndFeel`を使用する`JSlider`で、点線の`FocusBorder`を非表示に設定します。 #download(https://drive.google.com/uc?export=view&id=1zvmXqQPcE3P84DbjDk0vFmBympd7es24Gw) #download(https://drive.google.com/uc?id=1zvmXqQPcE3P84DbjDk0vFmBympd7es24Gw) * サンプルコード [#sourcecode] #code(link){{ JSlider slider2 = new JSlider(0, 100, 0) { private transient FocusListener listener; @Override public void updateUI() { removeFocusListener(listener); super.updateUI(); if (getUI() instanceof WindowsSliderUI) { setUI(new WindowsSliderUI(this) { @Override public void paintFocus(Graphics g) {} @Override public void paintFocus(Graphics g) { /* empty paint */ } }); Color bgc = getBackground(); listener = new FocusListener() { @Override public void focusGained(FocusEvent e) { setBackground(bgc.brighter()); } @Override public void focusLost(FocusEvent e) { setBackground(bgc); } }; addFocusListener(listener); } } }; }} * 解説 [#explanation] - `Default` -- `JSlider`にフォーカスが移動すると、`WindowsLookAndFeel`のデフォルトでは目盛りなどを含む領域に黒い点線の`FocusBorder`が描画される --- `MotifLookAndFeel`の場合は、赤い実線 --- `MetalLookAndFeel`、`NimbusLookAndFeel`の場合は、`Thumb`の描画が変化する - `Override SilderUI#paintFocus(...)` -- `BasicSilderUI#paintFocus(...)`をオーバーライドして`FocusBorder`を非表示に設定 -- `JSlider`にフォーカスが移動すると、`WindowsLookAndFeel`のデフォルトでは目盛りなどを含む領域に黒色で点線の`FocusBorder`が描画される --- `MotifLookAndFeel`の場合は、赤色の実線 --- `MetalLookAndFeel`、`NimbusLookAndFeel`の場合は`Thumb`の描画が変化する - `Override SliderUI#paintFocus(...)` -- `BasicSliderUI#paintFocus(...)`をオーバーライドして`FocusBorder`を非表示に設定 -- `UIManager.put("Slider.focus", UIManager.get("Slider.background"));`として`FocusBorder`の色を背景色と同じにしてすべての`JSlider`の`FocusBorder`を非表示にする方法もある -- 点線を非表示にする代わりに`FocusListener`を追加してフォーカスがある場合は背景色を変更 --- `WindowsLookAndFeel`で`MetalLookAndFeel`などのようにフォーカスありで`Thumb`の描画を変更するのはすこし面倒 * 参考リンク [#reference] - [https://stackoverflow.com/questions/20285522/how-to-remove-the-border-of-jslider java - How to remove the Border of jSlider - Stack Overflow] * コメント [#comment] #comment #comment