カスタムの Track Rectangle を持つカスタム JSlider に取り組んでいます。最初にスライダーを宣言するときに、トラックの四角形の色を設定する機能が必要です。
これが私が持っているもののスニペットです(クラスは同じパッケージ内の別々のファイルにあります):
public class NewSlider extends JSlider {
Color kolor;
public NewSlider (Color k) {
kolor = k;
}
public void updateUI() {
setUI(new NewSliderUI(this, kolor);
updateLabelUIs();
}
}
public class NewSliderUI extends BasicSliderUI {
Color sliderColor = Color.BLACK;
public NewSliderUI (JSlider b, Color k) {
super(b);
sliderColor = k;
}
}
上記のコードでは、「kolor」は最初は null であり、NewSliderUI が使用しようとするとエラーが発生します。updateUI()
メソッドが何よりも先に呼び出されているようです。次に、NewSlider コンストラクターが呼び出されます。さまざまなことを試しましたが、updateUI() が何よりも先に実行されるように見えるため、NewSlider クラスに追加するものは何も問題にならないようです。
色をハードコードすると (つまりsetUI(new NewSliderUI(this, Color.BLACK);
)、機能しますが、色ごとに異なるクラスを持つのはばかげているようです。
ありがとう。