标签未显示在鼠标事件JavaFx上

标签未显示在鼠标事件JavaFx上,java,mouseevent,javafx,pie-chart,Java,Mouseevent,Javafx,Pie Chart,我有一个饼图,其中我使用以下指南添加了鼠标侦听器: 然而,当我运行程序并点击图表时,它什么也不做 我尝试了System.out.println(caption.getText());标签上的文字是正确的,但是标签没有显示出来 我的代码如下: public void start(Stage stage) { Scene scene = new Scene(new Group()); stage.setTitle("Imported Fruits");

我有一个饼图,其中我使用以下指南添加了鼠标侦听器:

然而,当我运行程序并点击图表时,它什么也不做

我尝试了System.out.println(caption.getText());标签上的文字是正确的,但是标签没有显示出来

我的代码如下:

public void start(Stage stage) {
        Scene scene = new Scene(new Group());
        stage.setTitle("Imported Fruits");
        stage.setWidth(500);
        stage.setHeight(500);

        ObservableList<PieChart.Data> pieChartData =
                FXCollections.observableArrayList(
                new PieChart.Data("Grapefruit", 13),
                new PieChart.Data("Oranges", 25),
                new PieChart.Data("Plums", 10),
                new PieChart.Data("Pears", 22),
                new PieChart.Data("Apples", 30));
        final PieChart chart = new PieChart(pieChartData);
        chart.setTitle("Imported Fruits");

        ((Group) scene.getRoot()).getChildren().add(chart);

        final Label caption = new Label("");
        caption.setTextFill(Color.DARKORANGE);
        caption.setStyle("-fx-font: 24 arial;");

        for (final PieChart.Data data : chart.getData()) {
            data.getNode().addEventHandler(MouseEvent.MOUSE_PRESSED,
                new EventHandler<MouseEvent>() {
                    @Override public void handle(MouseEvent e) {
                        caption.setTranslateX(e.getSceneX());
                        caption.setTranslateY(e.getSceneY());
                        caption.setText(String.valueOf(data.getPieValue()) + "%");
                        caption.setVisible(true);
                     }
                });
        }

        stage.setScene(scene);
        stage.show();
    }

}
公共作废开始(阶段){
场景=新场景(新组());
阶段.设定名称(“进口水果”);
舞台设置宽度(500);
舞台设置高度(500);
可观测数据=
FXCollections.observableArrayList(
新PieChart.数据(“葡萄柚”,13),
新PieChart.数据(“橙子”,25),
新PieChart.数据(“李子”,10),
新PieChart.数据(“Pears”,22),
新PieChart.数据(“苹果”,30);
最终PieChart图表=新PieChart(PieChart数据);
图表.setTitle(“进口水果”);
((组)scene.getRoot()).getChildren().add(图表);
最终标签标题=新标签(“”);
标题.setTextFill(Color.DARKORANGE);
标题.setStyle(“-fx字体:24 arial;”);
对于(最终PieChart.Data:chart.getData()){
data.getNode().addEventHandler(按下MouseEvent.MOUSE_,
新的EventHandler(){
@重写公共无效句柄(MouseEvent e){
caption.setTranslateX(e.getSceneX());
caption.setTranslateY(e.getSceneY());
caption.setText(String.valueOf(data.getPieValue())+“%”;
caption.setVisible(true);
}
});
}
舞台场景;
stage.show();
}
}

有人能告诉我我做错了什么吗?

您忘记在根节点的子节点列表中添加标签“caption:-)

公共作废开始(阶段){
场景=新场景(新组());
阶段.设定名称(“进口水果”);
舞台设置宽度(500);
舞台设置高度(500);
可观测数据=
FXCollections.observableArrayList(
新PieChart.数据(“葡萄柚”,13),
新PieChart.数据(“橙子”,25),
新PieChart.数据(“李子”,10),
新PieChart.数据(“Pears”,22),
新PieChart.数据(“苹果”,30);
最终PieChart图表=新PieChart(PieChart数据);
图表.setTitle(“进口水果”);
最终ObservableList children=((组)scene.getRoot()).getChildren();
添加(图表);
最终标签标题=新标签(“”);
标题.setTextFill(Color.DARKORANGE);
标题.setStyle(“-fx字体:24 arial;”);
添加(标题);
对于(最终PieChart.Data:chart.getData()){
data.getNode().addEventHandler(按下MouseEvent.MOUSE_,
新的EventHandler(){
@重写公共无效句柄(MouseEvent e){
caption.setTranslateX(e.getSceneX());
caption.setTranslateY(e.getSceneY());
caption.setText(String.valueOf(data.getPieValue())+“%”;
caption.setVisible(true);
}
});
}
舞台场景;
stage.show();
}
我已经做了上述更改,可以验证它是否有效(如下图所示)


无需这样做,您只需添加标题,如下所示: 更改此行:((组)scene.getRoot()).getChildren().addAll(图表); 到:((组)scene.getRoot()).getChildren().addAll(图表,标题)

public void start(Stage stage) {
        Scene scene = new Scene(new Group());
        stage.setTitle("Imported Fruits");
        stage.setWidth(500);
        stage.setHeight(500);

        ObservableList<PieChart.Data> pieChartData =
                FXCollections.observableArrayList(
                new PieChart.Data("Grapefruit", 13),
                new PieChart.Data("Oranges", 25),
                new PieChart.Data("Plums", 10),
                new PieChart.Data("Pears", 22),
                new PieChart.Data("Apples", 30));
        final PieChart chart = new PieChart(pieChartData);
        chart.setTitle("Imported Fruits");
        final ObservableList<Node> children = ((Group) scene.getRoot()).getChildren();

        children.add(chart);

        final Label caption = new Label("");
        caption.setTextFill(Color.DARKORANGE);
        caption.setStyle("-fx-font: 24 arial;");
        children.add(caption);

        for (final PieChart.Data data : chart.getData()) {
            data.getNode().addEventHandler(MouseEvent.MOUSE_PRESSED,
                new EventHandler<MouseEvent>() {
                    @Override public void handle(MouseEvent e) {
                        caption.setTranslateX(e.getSceneX());
                        caption.setTranslateY(e.getSceneY());
                        caption.setText(String.valueOf(data.getPieValue()) + "%");
                        caption.setVisible(true);
                     }
                });
        }

        stage.setScene(scene);
        stage.show();
    }