如何在javafx中更改滑块的填充颜色
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在javafx中更改滑块的填充颜色,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5087字,纯文字阅读大概需要8分钟。
内容图文
![如何在javafx中更改滑块的填充颜色](/upload/InfoBanner/zyjiaocheng/690/cf0b4388f96f4e43a1c17159f8bfaeaf.jpg)
即时通讯制作视频播放器,并想使用滑块的时间轴,我想将滑块从第一张图片更改为第二张图片
我可以使用CSS代码执行此操作吗?如果是的话,这是什么代码
解决方法:
下面的长篇文章..如果您想要一种简单的方法来实现滑块上的??颜色,我应该提到您可以只使用JFoenix Slider,它具有您需要的功能.
尽管实际上您无需原生使用相同的结果,也无需使用第三库.
嗯,没有像-fx-progress-color这样的CSS规则可以将其设置为特定的颜色,然后就完成了. .track的颜色是通过以下CSS规则设置的:
.slider .track {
-fx-background-color:
-fx-shadow-highlight-color,
linear-gradient(to bottom, derive(-fx-text-box-border, -10%), -fx-text-box-border),
linear-gradient(to bottom,
derive(-fx-control-inner-background, -9%),
derive(-fx-control-inner-background, 0%),
derive(-fx-control-inner-background, -5%),
derive(-fx-control-inner-background, -12%)
);
-fx-background-insets: 0 0 -1 0, 0, 1;
-fx-background-radius: 0.25em, 0.25em, 0.166667em; /* 3 3 2 */
-fx-padding: 0.25em; /* 3 */
}
您只需要做几件事,第一件事是侦听滑块的值更改,第二件事是根据滑块的值更新轨道颜色.要设置背景颜色,您将需要为背景设置线性渐变,例如:
-fx-background-color:线性渐变(向右,#2D819D START,#969696 END);
在上面的代码中,您将使用从左到右的线性渐变背景,使用#2D819D颜色(代表“进度”颜色)和#969696代表剩余的进度.现在,START和END应该是数字,并且为了具有所需的外观,两个数字必须相等,因此当一个停止时另一个开始.例如,如果您设置:
-fx-background-color:线性渐变(向右,#2D819D 20%,#969696 20%);
真正的挑战是找到一种方法来在滑块的ChangeListener中以编程方式设置这些值.我的第一种方法是使用CSS变量,例如:
.slider .track{
-progress : 0.2;
-fx-background-color: linear-gradient(to right, #2D819D -progress, #969696 -progress);
}
并使用ChangeListener上的内联CSS规则更新-progress.遗憾的是,由于某些原因,该功能不受支持.我也想找出原因.另外,您不能为子类应用内联CSS,这意味着您不能执行slide.setStyle(“.track {…}”);
综上所述,您可以:
1.使用查找访问滑块的轨道,然后直接应用CSS.
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class CustomSlider extends Application {
@Override
public void start(Stage stage) throws Exception {
BorderPane mainPane = new BorderPane();
mainPane.setPadding(new Insets(15));
Slider slider = new Slider();
slider.setId("color-slider");
mainPane.setCenter(slider);
Scene scene = new Scene(mainPane, 250, 400);
stage.setScene(scene);
stage.show();
StackPane trackPane = (StackPane) slider.lookup(".track");
slider.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov, Number old_val, Number new_val) {
String style = String.format("-fx-background-color: linear-gradient(to right, #2D819D %d%%, #969696 %d%%);",
new_val.intValue(), new_val.intValue());
trackPane.setStyle(style);
}
});
trackPane.setStyle("-fx-background-color: linear-gradient(to right, #2D819D 0%, #969696 0%);");
}
public static void main(String[] args) {
launch(args);
}
}
2.从头开始制作自定义滑块(不是那么难)
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class SliderTest extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane mainPane = new BorderPane();
mainPane.setPadding(new Insets(15));
mainPane.setCenter(new ColorSlider());
Scene scene = new Scene(mainPane, 250, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
public class ColorSlider extends StackPane {
public ColorSlider() {
getStylesheets().add(this.getClass().getResource("colorSlider.css").toExternalForm());
Slider slider = new Slider();
slider.setId("color-slider");
// The rectangle which shows the progress
Rectangle progressRec = new Rectangle();
// Bind both width and height to match the size of Slider
progressRec.heightProperty().bind(slider.heightProperty().subtract(7));
progressRec.widthProperty().bind(slider.widthProperty());
progressRec.setFill(Color.web("#969696"));
// Make the corners of Rectangle to be rounded
progressRec.setArcHeight(15);
progressRec.setArcWidth(15);
// Listen on value changes on the slider to update the progress (color)
slider.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> ov, Number old_val, Number new_val) {
// Using linear gradient we can fill two colors to show the progress
// the new_val gets values between 0 - 100
String style = String.format("-fx-fill: linear-gradient(to right, #2D819D %d%%, #969696 %d%%);",
new_val.intValue(), new_val.intValue());
// set the Style
progressRec.setStyle(style);
}
});
getChildren().addAll(progressRec, slider);
}
}
}
colorSlider.css
#color-slider .track{
-fx-background-color:transparent;
}
内容总结
以上是互联网集市为您收集整理的如何在javafx中更改滑块的填充颜色全部内容,希望文章能够帮你解决如何在javafx中更改滑块的填充颜色所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。