所以我有一个具有自定义合成器外观和感觉的 JSlider,看起来像这样(在 xml 中):
<!-- Make and Bind a SliderTrack style -->
<style id="SliderTrackStyle">
<opaque value="FALSE"/>
</style>
<bind style="SliderTrackStyle" type="region" key="sliderTrack" />
<!-- Make and Bind a Vertical Slider Thumb style -->
<style id="verticalSliderThumbStyle">
<state>
<imagePainter method="sliderThumbBackground" path="/resources/images/slider/SliderThumbVertical.png"
sourceInsets="0 0 0 0"/>
</state>
<state value="PRESSED">
<imagePainter method="sliderThumbBackground" path="/resources/images/slider/SliderThumbVerticalPressed.png"
sourceInsets="0 0 0 0"/>
</state>
</style>
<bind style="verticalSliderThumbStyle" type="name" key="VerticalSlider.*" />
现在,这很好用,而且 JSlider 看起来也应该如此。然后我以编程方式控制滑块的值,使用slider.setValue();
我还可以以编程方式触发滑块上的鼠标侦听器,因为它有一些代码在单击滑块和释放滑块时立即执行。同样,这一切都很好。但是,我似乎无法弄清楚如何告诉滑块在值发生变化时看起来被按下。有没有办法告诉摆动使滑块看起来被按下,即使它没有被物理按下(触发PRESSED
L&F 中的状态)?
编辑:我可以通过使用DISABLED
与按下状态外观相同的状态来完成这项工作。然后我可以禁用滑块,移动它,稍后再启用它。显然,这是实现压制外观的一种非常老套的方法。任何其他想法将不胜感激。