1

我在 javafx 中创建了一个散点图。它由五个系列的数据组成。我从 Arraylist 添加了数据。我需要在每个数据点上显示一个工具提示。要添加工具提示,它说我们需要为每个数据点创建一个节点。我们怎么能做到这一点?

我尝试在添加数据时创建节点,但没有成功。我还尝试从散点图中访问数据并将其分配给新系列。即使没有工作。有人可以帮我从散点图中检索详细信息或数据点并为每个数据点创建一个节点。提前致谢

4

2 回答 2

11

来自 API 文档XYChart.Data.nodeProperty:(由我粗体标记)

public final ObjectProperty nodeProperty

要为此数据项显示的节点。您可以创建自己的节点并将其设置在数据项上,然后再将数据项添加到图表中。否则,图表将为您创建一个具有图表类型默认表示的节点。此节点将在数据添加到图表后立即设置。然后,您可以让它添加鼠标侦听器等。图表将尽力适当地定位和调整节点大小,例如在折线图或散点图上,该节点将定位在数据值位置的中心。对于条形图,它被定位并调整为该数据项的条形。

最好让图表设置其默认s 并稍后Node注册s。Tooltip像这样:

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Tooltip;
import javafx.stage.Stage;

public class SO extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        NumberAxis xa = new NumberAxis(0, 10, 1);
        NumberAxis ya = new NumberAxis(0, 100, 10);
        xa.setLabel("x");                
        ya.setLabel("x*x");
        final ScatterChart<Number,Number> chart = new ScatterChart<Number,Number>(xa,ya);
        chart.setTitle("Square");

        XYChart.Series<Number,Number> series1 = new XYChart.Series<>();
        series1.setName("square");
        for (double x=0; x<10; x++) {
            XYChart.Data<Number, Number> d = new XYChart.Data<Number, Number>(x, x*x);
            series1.getData().add(d);
        }

        chart.getData().add(series1);
        Scene scene  = new Scene(chart, 400, 300);
        stage.setScene(scene);
        stage.show();

        for (XYChart.Series<Number, Number> s : chart.getData()) {
            for (XYChart.Data<Number, Number> d : s.getData()) {
                Tooltip.install(d.getNode(), new Tooltip(
                        String.format("%2.1f ^ 2 = %2.1f", 
                                d.getXValue().doubleValue(), 
                                d.getYValue().doubleValue())));
            }
        }
    }

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

看起来像这样:

在此处输入图像描述

关于散点图的好文章:

于 2013-03-30T14:11:35.550 回答
2

将数据添加到条形图后

chart.getData().add(series);

将以下代码段添加到代码中

for (final Series<String, Number> series : chart.getData()) {
        for (final Data<String, Number> data : series.getData()) {
            Tooltip tooltip = new Tooltip();
            tooltip.setText(data.getYValue().toString());
            Tooltip.install(data.getNode(), tooltip);
        }
    }
于 2015-05-19T09:53:30.093 回答