在 JavaFX 中通过没有 css 的代码设置 LineChart 符号
Setting LineChart symbol via code without css in JavaFX
本题基于this and this。
用户可以选择自定义颜色,之后我需要用这种颜色显示折线图。这些行确实按照第二个 link:
中的描述工作
String rgb = String.format("%d, %d, %d",
(int) (user.getColor().getRed() * 255),
(int) (user.getColor().getGreen() * 255),
(int) (user.getColor().getBlue() * 255));
series.nodeProperty().get().setStyle("-fx-stroke: rgba(" + rgb + ", 1);");
我无法更改用户图表的符号。使用 css 你会这样做:
.default-color0.chart-line-symbol { -fx-background-color: #e9967a, white; }
.default-color1.chart-line-symbol { -fx-background-color: #f0e68c, white; }
.default-color2.chart-line-symbol { -fx-background-color: #dda0dd, white; }
我不能这样做,因为用户可以选择任何可能的颜色。有解决方法吗?
我试过了,但这会引发 NullPointerException
:
chart.lookup(".default-color0.chart-line-symbol")
.setStyle("-fx-background-color: rgba(" + rgb + ", 1), white;");
添加 Platform.runLater(() -> chart.lo....)
摆脱了 NullPointerException
(我不明白为什么)但只会将一些点变成正确的颜色,而不是图例。
定义一系列“查找颜色”,然后您可以通过编程方式更改这些颜色。
在外部 CSS 文件中,将这些设置为一些默认值,并根据它们定义背景颜色:
.line-chart {
symbol-color0: #e9967a ;
symbol-color1: #f0e68c ;
symbol-color2: #dda0dd ;
/* ... */
}
.default-color0.chart-line-symbol { -fx-background-color: symbol-color0, white; }
.default-color1.chart-line-symbol { -fx-background-color: symbol-color1, white; }
.default-color2.chart-line-symbol { -fx-background-color: symbol-color2, white; }
然后在您的 Java 代码中您可以将它们重新定义为任意颜色:
Color[] colors = getUserDefinedColors();
StringBuilder style = new StringBuilder();
for (int i = 0 ; i < colors.length ; i++) {
style.append("symbol-color")
.append(i)
.append(": ")
.append(convertToWebString(colors[i]))
.append("; ");
}
myLineChart.setStyle(style.toString());
类似
private String convertToWebString(Color c) {
int r = (int)(255*c.getRed());
int g = (int)(255*c.getGreen());
int b = (int)(255*c.getBlue());
return String.format("#%02x%02x%02x", r, g, b);
}
本题基于this and this。
用户可以选择自定义颜色,之后我需要用这种颜色显示折线图。这些行确实按照第二个 link:
中的描述工作String rgb = String.format("%d, %d, %d",
(int) (user.getColor().getRed() * 255),
(int) (user.getColor().getGreen() * 255),
(int) (user.getColor().getBlue() * 255));
series.nodeProperty().get().setStyle("-fx-stroke: rgba(" + rgb + ", 1);");
我无法更改用户图表的符号。使用 css 你会这样做:
.default-color0.chart-line-symbol { -fx-background-color: #e9967a, white; }
.default-color1.chart-line-symbol { -fx-background-color: #f0e68c, white; }
.default-color2.chart-line-symbol { -fx-background-color: #dda0dd, white; }
我不能这样做,因为用户可以选择任何可能的颜色。有解决方法吗?
我试过了,但这会引发 NullPointerException
:
chart.lookup(".default-color0.chart-line-symbol")
.setStyle("-fx-background-color: rgba(" + rgb + ", 1), white;");
添加 Platform.runLater(() -> chart.lo....)
摆脱了 NullPointerException
(我不明白为什么)但只会将一些点变成正确的颜色,而不是图例。
定义一系列“查找颜色”,然后您可以通过编程方式更改这些颜色。
在外部 CSS 文件中,将这些设置为一些默认值,并根据它们定义背景颜色:
.line-chart {
symbol-color0: #e9967a ;
symbol-color1: #f0e68c ;
symbol-color2: #dda0dd ;
/* ... */
}
.default-color0.chart-line-symbol { -fx-background-color: symbol-color0, white; }
.default-color1.chart-line-symbol { -fx-background-color: symbol-color1, white; }
.default-color2.chart-line-symbol { -fx-background-color: symbol-color2, white; }
然后在您的 Java 代码中您可以将它们重新定义为任意颜色:
Color[] colors = getUserDefinedColors();
StringBuilder style = new StringBuilder();
for (int i = 0 ; i < colors.length ; i++) {
style.append("symbol-color")
.append(i)
.append(": ")
.append(convertToWebString(colors[i]))
.append("; ");
}
myLineChart.setStyle(style.toString());
类似
private String convertToWebString(Color c) {
int r = (int)(255*c.getRed());
int g = (int)(255*c.getGreen());
int b = (int)(255*c.getBlue());
return String.format("#%02x%02x%02x", r, g, b);
}