java - 如何在 JSlider 获得焦点时删除虚线?

标签 java swing jslider

每当 JSlider 获得焦点时,我需要删除它周围出现的虚线:

dottedLine

这是我的代码:

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/

相关文章:

java - 为什么短信积分不从我们用 java 编写的短信销售门户上的用户帐户中扣除

java - 我应该在使用源代码控制时推送我的依赖项(jar 库)吗

java - 在工作线程上初始化 TextToSpeech 对象

Java选择txt文件并在函数中使用上述字符串

java - 使用 JSlider 创建日期选择器?

java - 将输入设置为变量以传递到表中

java - 部分应用程序神秘地无法重绘

java - 如何删除 JScrollPane 内 JTable 顶部的 A?

java - 将 JSlider 的间距设置为十的倍数

java - JSlider问题: Position after leftclick