【问题标题】:JavaFX PieChart Tooltip not showing despite being installed尽管已安装 JavaFX PieChart 工具提示,但未显示
【发布时间】:2018-01-19 17:12:44
【问题描述】:

我尝试在 chart.js 中为 PieChart 的每个“切片”显示类似于此的工具提示:

我发现this answer 基本上试图在同一个框架中实现相同的目标。它有两个赞成票,从其他(接受的)答案来看,它似乎也适用于其他图表类型。但是,从没有显示工具提示的意义上说,该代码对我来说并不真正有效。

显示问题的示例代码:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;


public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        BorderPane pane = new BorderPane();

        PieChart chart = new PieChart();

        Button randomValues = new Button();
        randomValues.setOnAction(ae -> {
            chart.getData().clear();
            List<PieChart.Data> data = randomValues().stream().map(i -> new PieChart.Data("Test" + i % 10, i)).collect(Collectors.toList());
            data.forEach(d -> {
                Tooltip tip = new Tooltip();
                tip.setText(d.getPieValue() + "");
                Tooltip.install(d.getNode(), tip);
            });
            chart.getData().addAll(data);
        });

        pane.setCenter(chart);
        pane.setBottom(randomValues);
        primaryStage.setScene(new Scene(pane));
        primaryStage.show();
    }

    private List<Integer> randomValues() {
        return new Random().ints(5).boxed().collect(Collectors.toList());
    }

    public static void main(String[] args) {
        launch(args);
    }
}

我预计会出现类似于图片的弹出窗口,但实际上没有任何显示。非常感谢任何帮助!

【问题讨论】:

  • @Sedrick 感谢您的链接。这链接到我在我的问题中提到的问题下链接的同一个问题,并使用相同的东西(Tooltip#install),这似乎没有效果。

标签: java javafx tooltip javafx-8 pie-chart


【解决方案1】:

我只是搬家了

chart.getData().addAll(data);

上面

data.forEach(d -> {
    Tooltip tip = new Tooltip();
    tip.setText(d.getPieValue() + "");
    Tooltip.install(d.getNode(), tip);
});

完整代码:

import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class Main extends Application
{

    @Override
    public void start(Stage primaryStage)
    {
        BorderPane pane = new BorderPane();

        PieChart chart = new PieChart();

        Button randomValues = new Button();
        randomValues.setOnAction(ae -> {
            chart.getData().clear();

            List<PieChart.Data> data = randomValues().stream().map(i -> new PieChart.Data("Test" + i % 10, i)).collect(Collectors.toList());
            chart.getData().addAll(data);
            data.forEach(d -> {
                Tooltip tip = new Tooltip();
                tip.setText(d.getPieValue() + "");
                Tooltip.install(d.getNode(), tip);
            });

        });

        pane.setCenter(chart);
        pane.setBottom(randomValues);
        primaryStage.setScene(new Scene(pane));
        primaryStage.show();
    }

    private List<Integer> randomValues()
    {
        return new Random().ints(5).boxed().collect(Collectors.toList());
    }

    public static void main(String[] args)
    {
        launch(args);
    }
}

【讨论】:

  • 这太容易了!所以在这个工作之前节点必须在场景图中?非常感谢!
  • @geisterfurz007 在将数据添加到图表之前不会创建节点。 (我很惊讶你的原始代码没有抛出空指针异常。)
  • 我刚刚检查了它的实现,如果节点为空,那么该方法将返回 ^^
猜你喜欢
  • 1970-01-01
  • 2017-11-25
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2020-10-17
  • 2021-04-11
  • 1970-01-01
相关资源
最近更新 更多