Я работаю над пользовательским JSlider, у которого есть собственный Track Rectangle. Мне нужна возможность установить цвет прямоугольника дорожки при первом объявлении слайдера.
Вот фрагмент того, что у меня есть (классы находятся в отдельных файлах в одном пакете):
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);
), то он работает, но иметь разные классы для каждого цвета кажется глупым.
Спасибо.