Java 当JSlider获得焦点时,如何从中删除虚线?
每当我的JSlider获得焦点时,我需要删除它周围出现的虚线: 这是我的代码:Java 当JSlider获得焦点时,如何从中删除虚线?,java,swing,jslider,Java,Swing,Jslider,每当我的JSlider获得焦点时,我需要删除它周围出现的虚线: 这是我的代码: private JSlider getSlVolume() { if (slVolume == null) { slVolume = new JSlider(); slVolume.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent arg0) {
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;
}
我试过使用
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 Look&Feel中更改它(您可能会因为使用com.sun.java.swing.plaf.Windows
package中的类而收到访问限制警告):
我更喜欢滑块是否仍然可以聚焦,这样它就可以用键控制,而不仅仅是鼠标。@LuisFernandez我已经编辑了我的答案。我以前的回答完全错了。我以为该方法是setfocuspaint()
,我立即发布了:(为什么要这样做?虚线用于让用户知道哪个组件具有输入焦点,如果没有它,用户不知道哪个组件将接收键盘输入。
JSlider slider = new JSlider();
WindowsSliderUI s = new WindowsSliderUI(slider) {
@Override
public void paintFocus(Graphics g) {
// dont paint focus
}
};
slider.setUI(s);