我正在尝试使用 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 的这些实例添加标签?
谢谢。
您可以在数据上调用 setNode 以向数据添加任意节点。
XYChart.Data<String, Number> data = new XYChart.Data<>(
s,
75
);
data.setNode(new Label(s));
示例
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();
}
}