【问题标题】:JavaFx: Processing Events for a Pie ChartJavaFx:处理饼图的事件
【发布时间】:2017-09-04 19:24:26
【问题描述】:

我创建了一个 javafx 饼图,并希望在用户单击饼图的一部分时执行一些操作。我正在关注这个教程:Tuto

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

这是我的代码

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

            }
        });
    }

教程代码:

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

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

【问题讨论】:

    标签: java charts highcharts javafx-8


    【解决方案1】:

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

    这是我们将Label 添加到Tooltip 并显示包含LabelTooltip 本身的相同代码

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

    最好使用 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);
    
        chart.getData().forEach((data) ->
        {
            data.getNode().
                    addEventHandler(MouseEvent.MOUSE_ENTERED, e ->
                    {
                        if (container.isShowing())
                        {
                            container.hide();
                        }
                        caption.setText(String.valueOf(data.getPieValue()) + "%");
                        container.show(stage, e.getScreenX(), e.getScreenY());
                    });
        });
    

    希望对你有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多