Добавление всплывающей подсказки или метки к диаграмме данных категории xAxis на JAVAFX - PullRequest
0 голосов
/ 01 октября 2019

Я получаю пример из здесь , и я ожидаю всплывающую подсказку для каждой категории данных xAxis в BarChart (название страны), чтобы я мог видеть подсказку во время курсора для каждого имени страны, например enter image description here Вот код

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

}

Я ожидаю услышать от вас.

1 Ответ

1 голос
/ 01 октября 2019

Из кода .. как вы можете установить обработчики событий для узла, вы также можете установить подсказку для узла.

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

Update ::

Согласно вашему требованию, если вы хотите всплывающую подсказку на метке оси, вы можете попробовать следующий подход. Я считаю, что это неправильный подход, но он может дать вам некоторые результаты. Также я не уверен, что вы хотите показать во всплывающих подсказках, если у вас есть несколько серий.

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()));
                });
            }
        });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...