如何在获得焦点时从JSlider中删除虚线?

问题描述 投票:0回答:1

我需要删除它在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;
}

我尝试按照建议的UIManager.put("Slider.focus", UIManager.get("Slider.background"));使用here,但对我来说不起作用。有什么建议吗?

java swing jslider
1个回答
0
投票

我设法实现它的唯一方法是更改​​其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包中的类可能会出现访问限制警告):

JSlider slider = new JSlider();
WindowsSliderUI s = new WindowsSliderUI(slider) {
    @Override
    public void paintFocus(Graphics g) {
        // dont paint focus
    }
};
slider.setUI(s);
© www.soinside.com 2019 - 2024. All rights reserved.