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

时间:2013-01-02 06:38:51

标签: javafx-2 javafx

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

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

2 个答案:

答案 0 :(得分:9)

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

  

public final ObjectProperty nodeProperty

     

要显示的节点   这个数据项。您可以创建自己的节点,也可以设置它   将项目添加到图表之前的数据项。否则图表   将为您创建一个具有默认表示形式的节点   图表类型。一旦将数据添加到该节点,就会设置此节点   图表。 然后你可以让它添加鼠标监听器等。图表可以   他们最好适当地定位和调整节点的大小,例如   线条或散点图表此节点将位于中心位置   数据值位置。对于条形图,这是定位和调整大小   作为此数据项的栏。

最好让图表设置默认Node并稍后注册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);
    }
}

看起来像这样:

enter image description here

关于散点图的好文章:

答案 1 :(得分: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);
        }
    }