Javafx - 如何向 XYChart.data 添加标签

问题描述 投票:0回答:1

我正在尝试使用 JavaFX 构建一个从头开始的甘特图,以便使用我自己的 XYChart 扩展进行机器监控。每台机器都由 XYChart.Series 的一个实例表示,如下所示:

series1 = new XYChart.Series();

代表机器请求任务的 XYChart.data 实例已添加到本系列中:

       series1.getData().add(new XYChart.Data(0, machine, new GanttChart.ExtraData( 1, "status-red")));

如何向 XYChart.Data 的这些实例添加标签?

谢谢。

java javafx gantt-chart
1个回答
0
投票

您可以在数据上调用 setNode 以向数据添加任意节点。

    XYChart.Data<String, Number> data =  new XYChart.Data<>(
            s,
            75
    );

    data.setNode(new Label(s));

示例

chart

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import java.io.IOException;
import java.util.concurrent.ThreadLocalRandom;

public class LabeledLettergramApp extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        String[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");

        XYChart.Series<String, Number> series = new XYChart.Series<>();
        for (String s : alphabet) {
            series.getData().add(
                    createData(s)
            );
        }

        BarChart<String, Number> barChart = new BarChart<>(
                new CategoryAxis(FXCollections.observableArrayList(alphabet)),
                new NumberAxis(0, 200, 20)
        );
        barChart.getData().add(series);
        barChart.setLegendVisible(false);
        barChart.setPrefSize(1_000, 500);
        barChart.setStyle("-fx-border-color: purple;");

        StackPane layout = new StackPane(new Group(barChart));
        Scene scene = new Scene(layout, 1_100, 600);

        stage.setScene(scene);
        stage.show();
    }

    private static XYChart.Data<String, Number> createData(String s) {
        XYChart.Data<String, Number> data =  new XYChart.Data<>(
                s,
                ThreadLocalRandom.current().nextInt(
                        50, 200
                )
        );

        data.setNode(new Label(s));

        return data;
    }

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

}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.