javafx 2.2中散点图中数据点的工具提示

0 javafx javafx-2

我在javafx中创建了一个散点图.它包含五个数据系列.我从Arraylist中添加了数据.我需要在每个数据点上显示一个工具提示.要添加工具提示,它说我们需要为每个数据点创建一个节点.我们怎么做?

我尝试在添加数据时创建节点,但我没有成功.我也尝试从散点图中访问数据并将其分配给一个新系列.即不起作用.有人请帮我从散点图中检索细节或数据点,并为每个数据点创建一个节点.提前致谢

Rai*_*rze 9

来自以下的API文档XYChart.Data.nodeProperty:(由我大胆标记)

public final ObjectProperty nodeProperty

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

最好让图表设置其默认值NodeTooltip稍后注册.像这样:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

在此输入图像描述

关于散点图的好文章: