JSliderのFocusBorderを非表示に設定する
Total: 2488
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
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) {
/* 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);
}
}
};
View in GitHub: Java, Kotlin解説
Default
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
の描画を変更するのはすこし面倒