每当 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 外观和感觉中更改它(您可能会因使用 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);
关于java - 如何在 JSlider 获得焦点时删除虚线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59118910/