【发布时间】:2018-11-06 05:48:41
【问题描述】:
在我的 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 添加为样式有关,因为即使添加简单的非动态样式也不起作用。我没有收到任何错误,所以我不确定我做错了什么。
感谢您提供任何帮助,也感谢您提供更好的方法来完成此任务。谢谢!
【问题讨论】:
-
percentage + "%, white" + percent + "% 不应该是百分比 + "%, white" + (100-percentage )+ "%"吗?
-
它可能是......我没有机会使用 CSS 语句,因为我什至无法应用它。现在我已经用更简单的“.slider .track {-fx-background-color:linear-gradient(to right, #90C7E0 50%, white 50%);}”交换了动态css,但它仍然没有当我尝试应用它时工作,即使我直接将它放在 CSS 文件中它确实有效。
-
样式类不能像这样工作:
getStyleClass()给出了一个 CSS 类名 列表,用于确定外部 css 文件中的哪些规则应用于节点。 -
我感觉这与此有关...有什么建议可以代替我完成此任务吗?
-
你应该使用 Node.setStyle()