Java 当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) {

每当我的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;
}

我试过使用
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);