В моем FXML у меня есть простой слайдер:
<Slider fx:id="timeSlider" showTickLabels="true" GridPane.rowIndex="3" GridPane.columnIndex="0" GridPane.columnSpan="4"/>
Этот слайдер является частью музыкального приложения для настольного компьютера, которое я пишу, и оно показывает, как далеко в песне был воспроизведен.Я написал событие изменения, которое вызывается каждый раз, когда изменяется время песни, и это успешно завершает скольжение ручки / большого пальца вниз.
Теперь я пытаюсь также покрасить левую часть (уже сыгранную) синими правая часть (которую еще предстоит сыграть) белая, когда ручка сдвигается вниз.Если я жестко закодирую эту строку в своем CSS, я смогу добиться затухания сине-белого на отметке 50%.
.slider .track {-fx-background-color: linear-gradient(to right, #90C7E0 50%, white 50%);}
Однако мне нужно, чтобы это было динамично в зависимости от того, как далеко я нахожусь в песне.Я написал следующий код, но, кажется, не могу применить стиль CSS
song.getMediaPlayer().currentTimeProperty().addListener(new ChangeListener<Duration>() {
@Override
public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
if (newValue != null && timeSlider != null) {
timeSlider.setValue(newValue.toSeconds());
double percentage = (newValue.toSeconds()/song.getDuration())*100;
String css = ".slider .track{-fx-background-color: linear-gradient(to right, #90C7E0 " +
percentage + "%, white " + percentage + "%);}";
timeSlider.getStyleClass().add(css);
}
}
});
Я считаю, что это связано с тем, как я добавляю CSS как стиль, потому что даже добавление простогоне динамический стиль не работает.Я не получаю ошибок, поэтому я не уверен, что я делаю неправильно.
Любая помощь приветствуется, и лучшие способы сделать это также приветствуются.Спасибо!