【问题标题】:Adding Tooltip or Label to xAxis CategoryData Chart on JAVAFX在 JAVAFX 上向 xAxis CategoryData 图表添加工具提示或标签
【发布时间】:2020-01-30 08:12:07
【问题描述】:

我从here 获得示例,我希望为 BarChart(国家/地区名称)的每个 xAxis 数据类别提供工具提示,以便在每个国家/地区名称的光标处看到工具提示,例如 这是代码

public class BarChartSample extends Application {
final static String austria = "Austria";
final static String brazil = "Brazil";

@Override public void start(Stage stage) {
    stage.setTitle("Bar Chart Sample");
    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis();
    final BarChart<String,Number> bc = new BarChart(xAxis,yAxis);
    bc.setTitle("Country Summary");
    xAxis.setLabel("Country");       
    yAxis.setLabel("Value");

    XYChart.Series series1 = new XYChart.Series();
    series1.setName("2003");       
    series1.getData().add(new XYChart.Data(austria, 25601.34));
    series1.getData().add(new XYChart.Data(brazil, 20148.82));


    Scene scene  = new Scene(bc,800,600);
    bc.getData().addAll(series1);

    //now you can get the nodes.
    for (Series<String,Number> serie: bc.getData()){
        for (XYChart.Data<String, Number> item: serie.getData()){
            item.getNode().setOnMousePressed((MouseEvent event) -> {
                System.out.println("you clicked "+item.toString()+serie.toString());
            });
        }
    }
    stage.setScene(scene);
    stage.show();
}

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

}

我正在寻找你的消息。

【问题讨论】:

    标签: java javafx charts tooltip


    【解决方案1】:

    从代码中......因为您可以将事件处理程序设置为节点,您也可以将工具提示设置为节点。

    for (XYChart.Series<String, Number> series : bc.getData()) {
        for (XYChart.Data<String, Number> item : series.getData()) {
            item.getNode().setOnMousePressed((MouseEvent event) -> {
                System.out.println("you clicked " + item.toString() + series.toString());
            });
            Tooltip.install(item.getNode(), new Tooltip(item.getXValue() + ":\n" + item.getYValue()));
        }
    }
    

    更新::

    根据您的要求,如果您想要轴标签上的工具提示,您可以尝试以下方法。我相信这不是正确的方法,但它可以给你一些结果。如果您有多个系列,我也不确定您想在工具提示中显示什么。

    xAxis.getChildrenUnmodifiable().addListener((ListChangeListener<Node>) p -> {
        if (p.next()) {
            p.getAddedSubList().forEach(node -> {
                if (node != null && node instanceof Text) {
                    final Text textNode = (Text) node;
                    final Optional<XYChart.Data<String, Number>> data = bc.getData().get(0).getData().stream().filter(item -> item.getXValue().equalsIgnoreCase(textNode.getText())).findFirst();
                    data.ifPresent(d -> {
                        Tooltip.install(textNode, new Tooltip(d.getXValue() + ":\n" + d.getYValue()));
                    });
                }
            });
        }
    });
    

    【讨论】:

    • 请查看我在将光标移动到“奥地利”时发布的图片,然后显示工具提示。您的代码运行以在光标位于列栏时显示工具提示
    • 太棒了!非常感谢,它对我有用。谢谢你的礼物:)
    • 如果您在 OP 中的问题得到解决.. 将其标记为已回答。它可能会帮助其他人:)
    猜你喜欢
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    相关资源
    最近更新 更多