Swing/SliderFocusBorder のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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?id=1zvmXqQPcE3P84DbjDk0vFmBympd7es24Gw
概要
WindowsLookAndFeel
を使用するJSlider
で、点線のFocusBorder
を非表示に設定します。
Screenshot
Advertisement
サンプルコード
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) {}
});
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);
}
}
};
View in GitHub: Java, Kotlin解説
Default
JSlider
にフォーカスが移動すると、WindowsLookAndFeel
のデフォルトでは目盛りなどを含む領域に黒色で点線のFocusBorder
が描画されるMotifLookAndFeel
の場合は、赤色の実線MetalLookAndFeel
、NimbusLookAndFeel
の場合は、Thumb
の描画が変化する
Override SilderUI#paintFocus(...)
BasicSilderUI#paintFocus(...)
をオーバーライドしてFocusBorder
を非表示に設定UIManager.put("Slider.focus", UIManager.get("Slider.background"));
としてFocusBorder
の色を背景色と同じにしてすべてのJSlider
のFocusBorder
を非表示にする方法もある- 点線を非表示にする代わりに
FocusListener
を追加してフォーカスがある場合は背景色を変更WindowsLookAndFeel
でMetalLookAndFeel
などのようにフォーカスありでThumb
の描画を変更するのはすこし面倒