そのため、次のようなカスタム シンセのルック アンド フィールを持つ 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
押された状態と同じ外観を持つ状態を使用して、この作業を行うことができます。その後、スライダーを無効にして移動し、後で再び有効にできます。明らかに、それはプレスされた外観を実現するためのかなりハックな方法です. 他のアイデアをいただければ幸いです。