2

所以我有一个具有自定义合成器外观和感觉的 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();我还可以以编程方式触发滑块上的鼠标侦听器,因为它有一些代码在单击滑块和释放滑块时立即执行。同样,这一切都很好。但是,我似乎无法弄清楚如何告诉滑块在值发生变化时看起来被按下。有没有办法告诉摆动使滑块看起来被按下,即使它没有被物理按下(触发PRESSEDL&F 中的状态)?

编辑:我可以通过使用DISABLED与按下状态外观相同的状态来完成这项工作。然后我可以禁用滑块,移动它,稍后再启用它。显然,这是实现压制外观的一种非常老套的方法。任何其他想法将不胜感激。

4

0 回答 0