当前节点+;线形图+;JavaFX

当前节点+;线形图+;JavaFX,javafx,linechart,Javafx,Linechart,我在javafx8中使用LineChart,我能够在图形中动态绘制序列,并为每个输入绘制符号。但问题是我只想显示当前节点的符号,而不是已经添加的节点的符号 我试过: linechart.setCreateSymbols(false); 但这并不能满足我的需要,它停止了为输入创建符号 有人能告诉我如何只显示当前符号而不是添加的符号吗???只需跟踪最后添加的数据点的节点即可。添加新点时,将上一个“最后一点”的可见性设置为false 您可以直接使用 import java.util.Random;

我在javafx8中使用
LineChart
,我能够在图形中动态绘制序列,并为每个输入绘制符号。但问题是我只想显示当前节点的符号,而不是已经添加的节点的符号

我试过:

linechart.setCreateSymbols(false);
但这并不能满足我的需要,它停止了为输入创建符号


有人能告诉我如何只显示当前符号而不是添加的符号吗???

只需跟踪最后添加的数据点的节点即可。添加新点时,将上一个“最后一点”的可见性设置为false

您可以直接使用

import java.util.Random;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
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.Button;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class LineChartShowSymbolForLastPointOnly extends Application {

    private Node lastPointAdded ;

    @Override
    public void start(Stage primaryStage) {
        LineChart<Number, Number> chart = new LineChart<>(new NumberAxis(), new NumberAxis());
        Series<Number, Number> series = new Series<>();
        chart.getData().add(series);
        chart.setAnimated(false);

        Button addDataPointButton = new Button("Add data point");
        Random rng = new Random();
        addDataPointButton.setOnAction(e -> {
            if (lastPointAdded != null) {
                lastPointAdded.setVisible(false);
            }
            Data<Number, Number> data = new Data<>(series.getData().size(), rng.nextDouble());
            series.getData().add(data);
            lastPointAdded = data.getNode();
        });

        BorderPane.setAlignment(addDataPointButton, Pos.CENTER);
        BorderPane.setMargin(addDataPointButton, new Insets(10));
        BorderPane root = new BorderPane(chart, null, null, addDataPointButton, null);

        primaryStage.setScene(new Scene(root, 800, 600));
        primaryStage.show();
    }

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

“现在节点”是指最后添加的节点吗?@James\u D是的。你说得对!!这是最后一个
import java.util.Random;

import javafx.application.Application;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
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.Button;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class LineChartShowSymbolForLastPointOnly extends Application {

    @Override
    public void start(Stage primaryStage) {
        LineChart<Number, Number> chart = new LineChart<>(new NumberAxis(), new NumberAxis());
        Series<Number, Number> series = new Series<>();
        chart.getData().add(series);
        chart.setAnimated(false);


        ObjectProperty<Node> lastPointAdded = new SimpleObjectProperty<>();
        lastPointAdded.addListener((obs, oldNode, newNode) -> {
            if (oldNode != null) {
                oldNode.setVisible(false);
            }
        });

        Button addDataPointButton = new Button("Add data point");
        Random rng = new Random();
        addDataPointButton.setOnAction(e -> {
            Data<Number, Number> data = new Data<>(series.getData().size(), rng.nextDouble());
            series.getData().add(data);
            lastPointAdded.set(data.getNode());
        });

        BorderPane.setAlignment(addDataPointButton, Pos.CENTER);
        BorderPane.setMargin(addDataPointButton, new Insets(10));
        BorderPane root = new BorderPane(chart, null, null, addDataPointButton, null);

        Scene scene = new Scene(root, 800, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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