尽管安装了JavaFX PieChart Tooltip但仍未显示

我尝试在图表中为PieChart的每个“切片”显示一个工具提示,类似于chart.js:

工具提示示例

我发现这个答案基本上试图在同一个框架中实现相同的目标。 它有两个upvotes,同样似乎在其他(接受的)答案判断其他图表类型。 但是,在没有工具提示出现的意义上,代码对我来说并不适用。

显示问题的示例代码:

import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.chart.PieChart; import javafx.scene.control.Button; import javafx.scene.control.Tooltip; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; import java.util.List; import java.util.Random; import java.util.stream.Collectors; public class Main extends Application { @Override public void start(Stage primaryStage) { BorderPane pane = new BorderPane(); PieChart chart = new PieChart(); Button randomValues = new Button(); randomValues.setOnAction(ae -> { chart.getData().clear(); List data = randomValues().stream().map(i -> new PieChart.Data("Test" + i % 10, i)).collect(Collectors.toList()); data.forEach(d -> { Tooltip tip = new Tooltip(); tip.setText(d.getPieValue() + ""); Tooltip.install(d.getNode(), tip); }); chart.getData().addAll(data); }); pane.setCenter(chart); pane.setBottom(randomValues); primaryStage.setScene(new Scene(pane)); primaryStage.show(); } private List randomValues() { return new Random().ints(5).boxed().collect(Collectors.toList()); } public static void main(String[] args) { launch(args); } } 

我期待一个类似于图片的弹出窗口,但实际上没有任何东西出现。 任何帮助深表感谢!

我只是感动

 chart.getData().addAll(data); 

以上

 data.forEach(d -> { Tooltip tip = new Tooltip(); tip.setText(d.getPieValue() + ""); Tooltip.install(d.getNode(), tip); }); 

完整代码:

 import java.util.List; import java.util.Random; import java.util.stream.Collectors; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.chart.PieChart; import javafx.scene.control.Button; import javafx.scene.control.Tooltip; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { BorderPane pane = new BorderPane(); PieChart chart = new PieChart(); Button randomValues = new Button(); randomValues.setOnAction(ae -> { chart.getData().clear(); List data = randomValues().stream().map(i -> new PieChart.Data("Test" + i % 10, i)).collect(Collectors.toList()); chart.getData().addAll(data); data.forEach(d -> { Tooltip tip = new Tooltip(); tip.setText(d.getPieValue() + ""); Tooltip.install(d.getNode(), tip); }); }); pane.setCenter(chart); pane.setBottom(randomValues); primaryStage.setScene(new Scene(pane)); primaryStage.show(); } private List randomValues() { return new Random().ints(5).boxed().collect(Collectors.toList()); } public static void main(String[] args) { launch(args); } }