gpt4 book ai didi

java - 如何根据 slider 上拇指当前位置的 slider 颜色更改 JFXSlider 拇指的颜色?

转载 作者:行者123 更新时间:2023-12-03 16:58:15 27 4
gpt4 key购买 nike

我正在使用 JFXSlider在 JavaFX 中,我对 JFXSlider 的颜色使用了线性渐变的轨道(使用 CSS)。但是,我还想将拇指的颜色更改为该位置的 slider 颜色。我为 slider 的线性渐变使用了以下 CSS,并摆脱了 JFXSlider 的默认绿色。 :

.jfx-slider .track {
-fx-pref-height: 10;
-fx-background-color: linear-gradient(to right,red,orange);
}
.jfx-slider .colored-track {
-fx-background-color: transparent;
}
我尝试了以下 CSS 代码以使拇指颜色与当前位置的 slider 颜色相同,但它不起作用。
.jfx-slider .thumb {
-fx-background-color: linear-gradient(to right,red,orange);
}
我想可能是我尝试的代码只为拇指的背景颜色提供了内部线性渐变。有谁知道如何解决这个问题?附言我正在使用 JFoenix 9.0.10、JavaFX 15 和 JDK 15。

最佳答案

一种可能的解决方案是添加一个全局 CSS 变量并根据 JFXSlider 当前值更改它。例如 :

.root {
-fx-custom-color : red;
}
然后在你的 jfx-slider css 规则上使用这个变量,比如:
/* Styling the slider thumb */
.jfx-slider>.thumb {
-fx-background-color: -fx-custom-color;
}

/* Styling the animated thumb */
.jfx-slider>.animated-thumb {
-fx-background-color: -fx-custom-color;
}
之后,您需要弄清楚如何更新“-fx-custom-color”变量以及如何确定需要为 Slider 的特定值(或者更确切地说是位置)设置哪种颜色。
首先,您应该向 value 属性添加一个监听器以监听值的变化。其次,使用 Color 类的 interpolate 方法确定颜色,最后更新 -fx-custom-color 的新值对 JFXSlider 使用内联 CSS 样式。
这是一个完整的例子:
import com.jfoenix.controls.JFXSlider;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class SliderTesting extends Application {

public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {

JFXSlider slider = new JFXSlider(0, 100, 0);

slider.valueProperty().addListener(e -> {
Color imageColor = Color.RED.interpolate(Color.ORANGE,
slider.getValue() / 100);
slider.setStyle("-fx-custom-color : " + colorToHex(imageColor) + ";");
});

VBox box = new VBox(slider);
box.setPadding(new Insets(20));
box.setPrefSize(400, 400);
box.setAlignment(Pos.CENTER);

Scene scene = new Scene(box);
scene.getStylesheets()
.add(this.getClass().getResource("custom-jfoenix.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}

public static String colorToHex(Color color) {
return String.format("#%02X%02X%02X", (int) (color.getRed() * 255),
(int) (color.getGreen() * 255), (int) (color.getBlue() * 255));
}
}
还有“custom-jfoenix.css”文件
.root {
-fx-custom-color : red;
}

/* Styling the slider track */
.jfx-slider>.track {
-fx-pref-height: 10;
}

/* Styling the slider thumb */
.jfx-slider>.thumb {
-fx-background-color: -fx-custom-color;
}

/* Styling the filled track */
.jfx-slider>.colored-track {
-fx-background-color: linear-gradient(to right, red, orange);
}

/* Styling the animated thumb */
.jfx-slider>.animated-thumb {
-fx-background-color: -fx-custom-color;
}
结果:
enter image description here

关于java - 如何根据 slider 上拇指当前位置的 slider 颜色更改 JFXSlider 拇指的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65385864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com