java - 鼠标事件 JavaFx 上未显示标签

标签 java mouseevent javafx pie-chart

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

Oracle guide to pie chart

但是,当我运行我的程序并单击图表时,它没有执行任何操作。

我试过 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();
    }

}

谁能告诉我我做错了什么?

最佳答案

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

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();
    }

我已经进行了上述更改并且可以验证它是否有效(如下图所示)

enter image description here

关于java - 鼠标事件 JavaFx 上未显示标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13880356/

相关文章:

java - Gradle with IntelliJ 不加载 PostgreSQL JDBC 作为依赖项

java - 在计时器完成或取消后运行代码

actionscript-3 - Event.MOUSE_LEAVE 在 AS3 中不起作用

javafx - Corretto 是否支持 javaFX?

javafx - TextArea 中的拼写检查文本

javafx-2 - 热衷于动态更新字体大小

java - 如何在 JScrollPane 中修改 JPanel 的大小?

java - 自定义 spring boot actuator 健康状态

javascript - 在桌面上用鼠标滑动手势,如 Photoswipe,但为 div 设置动画

CSS 将元素位置设置为事件上的鼠标位置