Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx 2 动态选择JavaFX线条图符号颜色_Javafx 2 - Fatal编程技术网

Javafx 2 动态选择JavaFX线条图符号颜色

Javafx 2 动态选择JavaFX线条图符号颜色,javafx-2,Javafx 2,我有一个包含折线图的JavaFX应用程序。我希望用户能够选择图表中每个系列的颜色。由于选择是动态的,我不能使用静态CSS来设置颜色。我还需要将其他控件设置为与关联系列相同的颜色。可以使用如下代码动态设置序列的线条颜色: series.getNode().setStyle("-fx-stroke: " + color + ";"); 这很好,我可以在相关控件上使用用户指定的颜色 我的问题是,我还需要将每个系列的符号颜色设置为相同的颜色。我找不到任何方法来动态地做这件事。我在这个主题上读到的所有教

我有一个包含折线图的JavaFX应用程序。我希望用户能够选择图表中每个系列的颜色。由于选择是动态的,我不能使用静态CSS来设置颜色。我还需要将其他控件设置为与关联系列相同的颜色。可以使用如下代码动态设置序列的线条颜色:

series.getNode().setStyle("-fx-stroke: " + color + ";");
这很好,我可以在相关控件上使用用户指定的颜色

我的问题是,我还需要将每个系列的符号颜色设置为相同的颜色。我找不到任何方法来动态地做这件事。我在这个主题上读到的所有教程、文档和帖子都指向静态CSS方法

大多数图表小部件使这类事情变得非常容易,但我在这里或Oracle论坛上没有发现任何线索。任何指导都将不胜感激

--更新--


除了枚举每个系列中的每个数据点,获取关联的符号节点并单独设置样式之外,我没有其他方法可以做到这一点。不是我所希望的。在这个过程中,我意识到为符号分配的默认节点是StackPane。我不需要这种灵活性,所以我用一个矩形代替了它。这使得渲染速度更快。

我遇到了类似的问题。我事先不知道哪些数据将被添加到图表中,所以我不能使用固定的样式表

我想出了这个解决办法。此代码侦听添加到图形中的新系列。对于每个添加的序列,它将为添加到序列中的数据创建一个新的侦听器。 此侦听器将查找这是哪个系列,第0个、第1个等,然后查找线条和图例/符号着色的两个节点。 一旦两者都设置好,它就可以取消订阅。 问题可能是,当您在第一个添加的数据点上收到回调时,图例/符号节点还不可用

我知道这很复杂,我愿意听到改进。 至少它会给你一个选项,可以动态地将颜色设置为你想要的任何颜色

final LineChart<Number, Number> chart = new LineChart<>(new NumberAxis(), new NumberAxis());
final ObservableList<Series<Number, Number>> series = chart.getData();
        series.addListener(new ListChangeListener<Series<Number, Number>>() {
            @Override
            public void onChanged(Change<? extends Series<Number, Number>> change) {
                ObservableList<? extends Series<Number, Number>> list = change.getList();
                for (final Series<Number, Number> serie : list) {
                    serie.getData().addListener(new ListChangeListener<Data<Number, Number>>() {
                        @Override
                        public void onChanged(Change<? extends Data<Number, Number>> ignore) {
                            int index = series.indexOf(serie);
                            Set<Node> nodes = chart.lookupAll(".series" + index);
                            boolean isStyleSet = false;
                            for (Node n : nodes) {
                                if (StringUtils.isEmpty(n.getStyle())) {
                                    String css = "-fx-stroke: %s; -fx-background-color: %s, white; ";
                                    String color = //assign dynamically here, for instance based on the name of the series
                                    n.setStyle(String.format(css, color, color));
                                    isStyleSet = true;
                                }
                            }
                            if (!isStyleSet & nodes.size() > 1) {
                                serie.getData().removeListener(this);
                            }
                        }
                    });
                }
            }
        });
final LineChart chart=new LineChart(new NumberAxis(),new NumberAxis());
最终ObservableList系列=chart.getData();
series.addListener(新的ListChangeListener(){
@凌驾

public void onchange(Change我遇到了一个可能略有不同(可能更复杂)的问题;我需要将一系列的某些节点设置为一种颜色,将同一系列中的其他节点设置为另一种颜色(我还需要能够动态更改颜色的分配).我在JavaFx 2.2中工作;我有css样式,但这在这里当然没有帮助。我在任何地方都找不到解决我的问题的方法;这是我找到的最接近的方法


我只想说,我无法使“series.getNode().setStyle”(-fx stroke:“+color+”;”)正常工作。但是,使用“-fx background”相反,它确实有效。我希望这对某人有所帮助。

我比赛迟到了,但也许有人可以使用我的解决方案。对我有效的方法是迭代数据系列中的每个项目,并为每个项目设置CSS样式

for (int index = 0; index < series.getData().size(); index++) {
        XYChart.Data dataPoint = series.getData().get(index);
        Node lineSymbol = dataPoint.getNode().lookup(".chart-line-symbol");
        lineSymbol.setStyle("-fx-background-color: #00ff00, #000000; -fx-background-insets: 0, 2;\n" +
                "    -fx-background-radius: 3px;\n" +
                "    -fx-padding: 3px;");
    }
for(int index=0;index
Karin你介意发布你的代码吗?我有一个与你完全一样的问题-我有一个系列,其中包含一些较小的系列,我想更改线条和符号的颜色。我找不到任何关于如何以编程方式更改符号的内容。我尝试了你的建议,但似乎没有效果为我工作,我很想看看你是如何使用组件和设置符号的颜色的。谢谢!你所说的dataSeries是chart对的吗?lineSymbol返回nullBy data series我是指在图表上存储每条图形线的值的对象。它可能会这样声明:
XYChart.series=new XYChart.Data()
这也会影响图例吗?不,这不会影响图例。您必须对图例单独应用样式。我尝试根据caspian.css和您的代码应用.chart图例,但它会给我空指针异常。您能帮我吗,我真的很绝望