- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试动态更改图例的颜色,因此我的 css 类中没有任何线条和符号的样式。我可以动态更改图表中的所有线条和符号,但遗憾的是无法更改图例。他们保持默认状态。有没有办法动态地做到这一点?
所以,我尝试过:
1)
for (int index = 0; index < series.getData().size(); index++) {
XYChart.Data dataPoint = series.getData().get(index);
Node lineSymbol = dataPoint.getNode().lookup(".chart-legend");
lineSymbol.setStyle("-fx-background-color: #00ff00, #000000; -fx-background-insets: 0, 2;\n" +
" -fx-background-radius: 3px;\n" +
" -fx-padding: 3px;");
}
根据 caspian.css 和下面的链接问题,这应该可以工作,但它给了我 NullPointerException 因为无法找到 .chart-legend,即使它在那里。
2)
for (Node n : lineChart.getChildrenUnmodifiable())
{
if (n instanceof Legend)
{
final Legend legend = (Legend) n;
// remove the legend
legend.getChildrenUnmodifiable().addListener(new ListChangeListener<Object>()
{
@Override
public void onChanged(Change<?> arg0)
{
for (Node node : legend.getChildrenUnmodifiable())
{
if (node instanceof Label)
{
final Label label = (Label) node;
label.getChildrenUnmodifiable().addListener(new ListChangeListener<Object>()
{
@Override
public void onChanged(Change<?> arg0)
{
//make style changes here
}
});
}
}
}
});
}
}
这也没有做任何事情并且使程序减慢了速度。
3)
int index = 2;
Platform.runLater(new Runnable() {
@Override
public void run() {
myChart.lookupAll(".chart-legend-item-symbol").toArray()[index].setStyle("-fx-border-color: rgba(200,0,0,1)");
}});
这要么没有做任何事情。
如有任何帮助,我们将不胜感激。
我查看了所有这些,但它们没有帮助:
JavaFX StackedBarChart legend color don't follow chart color CSS styled
JavaFX 2.0 - How to change legend color of a LineChart dynamically?
编辑:这是我找到的解决方案
这些对我来说都不起作用,所以我找到了另一个解决方案。答案和 Platform.runLater 方法都不是。
XYChart.Series<Number,Number> value //is our serie value.
for(int index = 0; index<value.getData().size(); index++){
// we're looping for each data point, changing the color of line symbol
XYChart.Data dataPoint = value.getData().get(index);
Node lineSymbol = dataPoint.getNode().lookup(".chart-line-symbol");
lineSymbol.setStyle("-fx-background-color: #0000FF, white;");
}
// and this is for the color of the line
value.getNode().setStyle("-fx-border-style: solid; -fx-stroke: #0000FF; -fx-background-color: #0000FF;");
对于图例颜色更改:
for(Node n : chart.getChildrenUnmodifiable()){
if(n instanceof Legend){
for(Legend.LegendItem legendItem : ((Legend)n).getItems()){
legendItem.getSymbol().setStyle("-fx-background-color: #0000ff, white;");
}
}
}
希望这也适用于搜索此内容的任何人。
编辑给版主:这被标记为重复,但这个问题主要是关于 LineChart 的图例,因为尽管系列颜色正在变化,但它们没有按应有的方式更新。重复的问题只是关于更改系列的颜色。这个问题是关于这些元素的传说。
最佳答案
它对我来说只是更改查找的颜色名称CHART_COLOR_x
,其中x
是该系列的(从1开始的)索引。
即就这么做
chart.setStyle("CHART_COLOR_1: #ff0000 ; CHART_COLOR_2: #0000FF ;");
将第一个系列(线、点和图例)的颜色设置为红色,将第二个系列的颜色设置为蓝色。
这是 SSCCE:
import java.util.Random;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart.Data;
import javafx.scene.chart.XYChart.Series;
import javafx.scene.control.ColorPicker;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class DynamicLinechart extends Application {
@Override
public void start(Stage primaryStage) {
LineChart<Number, Number> chart = new LineChart<>(new NumberAxis(), new NumberAxis());
Series<Number, Number> series1 = new Series<>();
series1.setName("Data set 1");
Series<Number, Number> series2 = new Series<>();
series2.setName("Data set 2");
chart.getData().add(series1);
chart.getData().add(series2);
Random rng = new Random();
for (int i = 0 ; i <= 20 ; i++) {
series1.getData().add(new Data<>(i, rng.nextInt(100)));
series2.getData().add(new Data<>(i, rng.nextInt(100)));
}
ColorPicker picker1 = new ColorPicker();
ColorPicker picker2 = new ColorPicker();
ChangeListener<Color> listener = (obs, oldColor, newColor) ->
updateStyles(chart, picker1.getValue(), picker2.getValue());
picker1.valueProperty().addListener(listener);
picker2.valueProperty().addListener(listener);
picker1.setValue(Color.RED);
picker2.setValue(Color.BLUE);
BorderPane root = new BorderPane(chart);
HBox controls = new HBox(5, picker1, picker2);
controls.setPadding(new Insets(5));
root.setTop(controls);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
private void updateStyles(Node node, Color color1, Color color2) {
node.setStyle(String.format("CHART_COLOR_1: %s ; CHART_COLOR_2: %s ;", format(color1), format(color2)));
}
private String format(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);
}
public static void main(String[] args) {
launch(args);
}
}
如果您想要更多的控制(也许还需要更多的稳健性),请定义您自己的查找颜色,然后修改它们。 IE。在外部 CSS 文件中,执行类似的操作
.root {
-data-color-1: red ;
-data-color-2: blue ;
}
.default-color0.chart-line-symbol { -fx-background-color: -data-color-1, white; }
.default-color1.chart-line-symbol { -fx-background-color: -data-color-2, white; }
.default-color0.chart-series-line { -fx-stroke: -data-color-1; }
.default-color1.chart-series-line { -fx-stroke: -data-color-2; }
现在只需更新您定义的查找颜色的值:
private void updateStyles(Node node, Color color1, Color color2) {
node.setStyle(String.format("-data-color-1: %s ; -data-color-2: %s ;", format(color1), format(color2)));
}
关于JavaFX LineChart 动态改变图例颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48663754/
我正在尝试使用立方图制作 LineChart。结果如下面的截图所示:三次贝塞尔曲线显示错误并有“尖峰”。有人可以帮我让它正确显示吗? 这是我的配置: LineDataSet lineD
Tag Library supports namespace: http://primefaces. org/ui,但没有为名称定义标签:lineChart
我想使用 primefaces 5.1 创建折线图。但在加载我的 xhtml 页面时,我收到错误消息“ Tag Library supports namespace: http://primeface
默认情况下,在 chart.js 中显示折线图时.工具提示显示存在的所有数据集的值。 当我们将鼠标悬停在该数据集点而不是所有数据集点上时,如何仅显示一个数据集点的值 最佳答案 nearest工具提示选
这个图表显示了问题: 我有计算数据和绘制图表的 JavaFX 程序,但为什么点连接不正确?我尝试了很多东西,甚至创建了两个单独的系列,但它不起作用。 public void createScatter
我知道在 Using Google Visualization API, how to turn off tooltips for a single column? 之前已经问过这个问题,但我没有得到
我想更新 LineChart 图例的样式,我在具有相应系列类的节点上使用 setStyle。 String color = .... XYChart.Series series = new XYCha
这是界面代码: @Override public void start(Stage primaryStage){ NumberAxis xAxis = new NumberAxis();
这个问题已经有答案了: JavaFX BarChart, Set Series Color by Series Name (1 个回答) 已关闭 5 年前。 此帖子已于 7 个月前编辑并提交审核,但未
我在从折线图中删除数据时遇到问题。我写了一个绘制图表的程序,点击按钮后的 Action 完成图表数据。 dataSeries1.getData().removeAll(); () {
我有这个代码: @Override public void start(Stage primaryStage){ NumberAxis xAxis = new NumberAxis();
刚刚遇到了 javafx.scene.chart.LineChart 的问题。当使用高于 5E13 的 Double 值填充图表数据时,该系列恰好消失(参见屏幕截图)。 之前 之后 以防万一:我使用以
我正在尝试将 javaFX LineChart 保存为 PNG,我希望背景是透明的。如果我这样做: SnapshotParameters spa = new SnapshotParameters();
我正在尝试使用 JavaFX 中的 LineChart 向用户显示数据。我有一个 Float 数组(不是原语,是对象,如 Float[] 中所示),可以随时添加,长度可以在 512 到 4096 点之
我正在尝试在 JavaFX 中创建折线图。此折线图应该有一个轴 (y) 与数字和另一个轴 (x) 与日期。日期范围应该由用户使用两个日期选择器来选择。现在这是我的问题:折线图只有类别和数字轴。有什么方
我正在使用这个图表库 https://github.com/danielgindi/Charts在我的申请中。我从中实现了折线图,图例相互重叠。我不确定这里出了什么问题,我确实玩过很多传奇的不同属性,
我正在使用 javascript 在我的 Web 应用程序中显示 Google Visulization LineChart。我怎样才能让它显示垂直网格线?我已经阅读了有关使用 chg 设置它们的信息
我想使用 Recharts 的 LineChart 来显示最多 200 个点的数据集。但是,我只想在小屏幕上显示其中 5 个数据点的点/工具提示/activeDot,因为在智能手机上不再可点击 200
我想在 LineChart 中设置一些值,但出现错误:添加了重复系列,或 NPE(我尝试清除我的系列列表,调用retainAll,但没有任何结果有帮助)在我的 Controller 类中,我存储了我的
我有一个关于图表 LineChart JavaFX 的好奇问题。 我有这个图表: 在 X 轴上形成“跳跃”的点(如我得分的两个红点所示),因此 JavaFX 在这两点之间画了一条线。如何删除每个“跳转
在这个演示中 http://nvd3.org/livecode/index.html#codemirrorNav只需将数据更改为 function() { return [ {
我是一名优秀的程序员,十分优秀!