JavaFx:处理饼图的事件

时间:2017-09-04 19:24:26

标签: java charts highcharts javafx-8

我创建了一个javafx饼图,并希望在用户点击饼图片时执行某些操作。我正在学习本教程:Tuto

我使用相同的代码,但我的标签没有在数据节点上显示问题。enter image description here

这是我的代码

    GraphOne.setData(pieChartData);
    for (final PieChart.Data data : GraphOne.getData()) {
        data.getNode().addEventHandler(MouseEvent.MOUSE_ENTERED,
                new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {

                caption.setTranslateX(e.getSceneX());
                caption.setTranslateY(e.getSceneY());
                caption.setText(String.valueOf(data.getPieValue()) + "%");

            }
        });
    }

Tutoriel的代码:

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

enter image description here

我的问题是如何将标签的位置与mouseEvent绑定?

1 个答案:

答案 0 :(得分:1)

我认为本教程已删除了一些代码,因为我们无法将JavaFX controls显示为Label,而无需将其添加到javafx.​scene.Parent并且代码没有添加它如何显示!!

以下是我们将Label添加到Tooltip的相同代码,并显示包含Tooltip的{​​{1}}本身

Label

首选使用Java 8 Lambda表达式和流 所以代码将是

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

for (final PieChart.Data data : chart.getData())
{
 data.getNode().addEventHandler(MouseEvent.MOUSE_ENTERED,
         new EventHandler<MouseEvent>()
            {
              @Override
              public void handle(MouseEvent e)
              {
                if (container.isShowing())
                {
                    container.hide();
                }
                caption.setText(String.valueOf(data.getPieValue()) + "%");
                container.show(stage, e.getScreenX(), e.getScreenY());
            }
        });
    }

希望这很有用