如何在获得焦点时从 JSlider 中删除虚线?
How to remove the dotted line from a JSlider when it gets focus?
我需要删除 JSlider 获得焦点时出现在它周围的虚线:
这是我的代码:
private JSlider getSlVolume() {
if (slVolume == null) {
slVolume = new JSlider();
slVolume.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent arg0) {
mP.setVolume(slVolume.getValue(), slVolume.getMaximum());
txtVol.setText(String.valueOf(slVolume.getValue()));
}
});
slVolume.setPaintLabels(true);
slVolume.setPaintTicks(true);
slVolume.setMinorTickSpacing(10);
slVolume.setMajorTickSpacing(20);
}
return slVolume;
}
我已经尝试按照 here 的建议使用 UIManager.put("Slider.focus", UIManager.get("Slider.background"));
,但它对我不起作用。有什么建议吗?
我设法实现它的唯一方法是更改其 UI(通过 setUI
方法)和 @Override
paintFocus
方法。这取决于您使用的外观和感觉。如果您使用 java 的默认外观和感觉,它将对所有组件使用 BasicUI。所以,为了改变它:
BasicSliderUI sliderUI = new BasicSliderUI(slider) {
@Override
public void paintFocus(Graphics g) {
// dont paint focus
}
};
slider.setUI(sliderUI);
但是,据我所知,您并不使用这种外观。由于您没有提到您使用的是什么 LAF,我将在 Windows 外观中向您展示如何更改它(您可能会收到 访问限制 使用 class 来自 com.sun.java.swing.plaf.windows
包):
JSlider slider = new JSlider();
WindowsSliderUI s = new WindowsSliderUI(slider) {
@Override
public void paintFocus(Graphics g) {
// dont paint focus
}
};
slider.setUI(s);
我需要删除 JSlider 获得焦点时出现在它周围的虚线:
这是我的代码:
private JSlider getSlVolume() {
if (slVolume == null) {
slVolume = new JSlider();
slVolume.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent arg0) {
mP.setVolume(slVolume.getValue(), slVolume.getMaximum());
txtVol.setText(String.valueOf(slVolume.getValue()));
}
});
slVolume.setPaintLabels(true);
slVolume.setPaintTicks(true);
slVolume.setMinorTickSpacing(10);
slVolume.setMajorTickSpacing(20);
}
return slVolume;
}
我已经尝试按照 here 的建议使用 UIManager.put("Slider.focus", UIManager.get("Slider.background"));
,但它对我不起作用。有什么建议吗?
我设法实现它的唯一方法是更改其 UI(通过 setUI
方法)和 @Override
paintFocus
方法。这取决于您使用的外观和感觉。如果您使用 java 的默认外观和感觉,它将对所有组件使用 BasicUI。所以,为了改变它:
BasicSliderUI sliderUI = new BasicSliderUI(slider) {
@Override
public void paintFocus(Graphics g) {
// dont paint focus
}
};
slider.setUI(sliderUI);
但是,据我所知,您并不使用这种外观。由于您没有提到您使用的是什么 LAF,我将在 Windows 外观中向您展示如何更改它(您可能会收到 访问限制 使用 class 来自 com.sun.java.swing.plaf.windows
包):
JSlider slider = new JSlider();
WindowsSliderUI s = new WindowsSliderUI(slider) {
@Override
public void paintFocus(Graphics g) {
// dont paint focus
}
};
slider.setUI(s);