javafx:为饼图处理事件

c9qzyr3d  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(366)

我创建了一个javafx饼图,当用户单击饼图的一部分时,我想做些什么。我在关注这个tutorial: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绑定标签的位置?

wf82jlnq

wf82jlnq1#

我认为教程删除了一些代码,因为我们无法显示 JavaFX controls 例如 Label 不把它加到 javafx.​scene.Parent 而代码没有添加它,所以它可以显示!!
下面是我们添加 LabelTooltip 并展示 Tooltip 包含 Label ```
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()
{
@Override
public void handle(MouseEvent e)
{
if (container.isShowing())
{
container.hide();
}
caption.setText(String.valueOf(data.getPieValue()) + "%");
container.show(stage, e.getScreenX(), e.getScreenY());
}
});
}

最好使用Java8Lambda表达式和流,这样代码就可以

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());
            });
});
希望这有用

相关问题