删除JSlider中通过拇指显示的值

时间:2010-12-16 12:41:02

标签: java swing jslider

我的JSlider有点问题,我无法解决。为了解释一下这种情况,我必须做一个JSlider,从0到20,经过0.1步。我通过创建一个从0到200的JSlider来解决问题,并重新定义了滑块下的标签,以显示相应的百分比而不是整数值。

但我有最后一个问题:我正在使用自定义L& F(我无法更改,显然,因为它来自客户端),它会在滑块上显示值。但是,此值以标准方式显示为整数。从我能够掌握的,这个显示与Slider.paintValue属性相关,正如我在javax.swing.plaf.synth.SynthSliderUI源代码中看到的那样。但是,我一直无法将其删除。

我现在尝试过:

UIManager.getLookAndFeelDefaults().put("Slider.paintValue", false);
UIManager.put("Slider.paintValue", false);

这两个都没有改变任何东西。

周围有一位Swing大师可以让我离开吗?

2 个答案:

答案 0 :(得分:3)

我刚刚使用基本的Synth LAF创建了一个带有JSlider的演示,我可以确认设置这些属性似乎根本没有效果,这很奇怪,而且非常烦人。

我查看了SynthSliderUI,我可以看到protected boolean paintValue中设置了private void updateStyle(JSlider c),因此,如果您要为此类创建自定义扩展,请设置{{1}的值}}为false,然后将滑块的UI设置为paintValue的新UI,您可能会更接近。要么完全覆盖绘制方法,要么将代码复制出原始代码,但要删除绘制拇指值的部分。

现在,setUI()本身是包私有的,但由于您使用的是客户端提供的LAF,因此无论如何都不是问题。如果他们的自定义滑块UI类是公共的和非最终的,您可以如上所述制作黑客版本,并将其应用于滑块。

如果它是最终的,那么您可以使用反射来更改SynthSliderUI字段作为最后的手段(可能在绘制滑块之前)。以下hack适用于我(取出反射调用,将字段设置为false以查看正在绘制的拇指值):

paintValue

答案 1 :(得分:3)

在致电UIManager.put("Slider.paintValue", false)之前致电initComponents()为我工作。