【发布时间】:2023-03-14 14:07:01
【问题描述】:
我想知道是否有办法将自定义函数添加到 JavaFX CSS,我主要感兴趣的是创建一个函数来获取补色。
目前唯一的颜色转换函数是派生和梯形。
为此使用派生的问题是它只能调整亮度,而且是在一个方向上。
提前感谢您的帮助
【问题讨论】:
-
您不妨也问openjfx-dev mailing list。
我想知道是否有办法将自定义函数添加到 JavaFX CSS,我主要感兴趣的是创建一个函数来获取补色。
目前唯一的颜色转换函数是派生和梯形。
为此使用派生的问题是它只能调整亮度,而且是在一个方向上。
提前感谢您的帮助
【问题讨论】:
您可以在主 CSS 中添加颜色列表:
Style.css
/* Colors
-------------- */
*{
-color-primary:#d8d8d8;
-color-accent:#F44336;
-color-secondary:#1E88E5;
-color-dark-primary:#1d1d1d;
-color-amber:#ffc400;
-color-gray:#666666;
}
并在任何地方使用它:
@import "../main/Styles.css";
.background {
-fx-background-color: -color-amber;
}
【讨论】:
让 JavaFX CSS 更有用的一种方法是将LESS 与 JavaFX 结合使用。
您只需要一个jlessc 和一个小型实用程序类,以便在您为控件设置样式表时为您提供帮助。
例如:
myControl.getStylesheets().add(
LessLoader.compile(getClass().getResource("styles.less")).toExternalForm());
这将允许您使用 saturate、lighten、darken 和 fadein 等颜色函数以及 LESS 带来的许多其他好处。
我在这里使用的LessLoader 类很简单:
public class LessLoader {
public static URL compile(URL url) {
try {
try (InputStream in = url.openStream()) {
String data = new String(in.readAllBytes(), StandardCharsets.UTF_8);
String compiledCSS = Less.compile(url, data, false, new ReaderFactory() {
@Override
public Reader create(URL url) throws IOException {
return super.create(url);
}
});
Path tempFile = Files.createTempFile(null, null);
Files.write(tempFile, compiledCSS.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE);
tempFile.toFile().deleteOnExit();
return tempFile.toUri().toURL();
}
}
catch(IOException e) {
throw new IllegalStateException(e);
}
}
}
【讨论】: