我在javafx中创建了一个散点图。它包含五个数据系列。我从Arraylist中添加了数据。我需要在每个数据点上显示一个工具提示。要添加工具提示,它说我们需要创建一个节点每个数据点。我们怎么做?
我尝试在添加数据时创建节点,但我没有成功。我也尝试从散点图中访问数据并将其分配给一个新系列。即不起作用。有人请帮助我从散点图中检索细节或数据点,并为每个数据点创建一个节点。 在此先感谢
答案 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);
}
}
看起来像这样:
关于散点图的好文章:
答案 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);
}
}