Мне нужно создать диаграмму, где каждый узел представлен цветом. Вот что я сделал:
final StackPane chartContainer = new StackPane();
Tube tube = tubeTest();
Random r = new Random();
XYChart.Series<Number,Number> serie = new XYChart.Series<Number,Number>();
for(int numSequence = 1; numSequence < 21; numSequence++)
{
for(int distance = 0; distance < 200; ++distance)
{
Color color = Color.hsb(r.nextInt(255), 1, 1);
Data<Number, Number> data = new XYChart.Data<Number,Number>(distance, numSequence);
Rectangle rectangle = new Rectangle(2,15, color);
data.setNode(new Rectangle(2,15, color));
serie.getData().add(data);
}
}
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Balayage (mm)");
yAxis.setLabel("Numéro de séquence");
LineChart<Number, Number> chart = new LineChart<Number, Number>(xAxis, yAxis);
chart.setData(FXCollections.observableArrayList(Collections.singleton(serie)));
Set<Node> node = chart.lookupAll(".chart-series-line");
node.forEach((element) -> {
element.setStyle("-fx-stroke-width : 0px;");
});
chart.prefHeightProperty().bind(chartContainer.heightProperty());
chart.prefWidthProperty().bind(chartContainer.widthProperty());
chartContainer.getChildren().add(chart);
//chartContainer.getChildren().add(rectanglePixel);
final BorderPane root = new BorderPane();
root.setCenter(chartContainer);
final Scene scene = new Scene(root, 600, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
//Convertit la valeur d'un point en sa couleur hsv
private Color hsvColorValue(double value) {
double AMPLITUDE_MAX = 50;
//h = (valeur / max)*255
double h = (value/AMPLITUDE_MAX)*255;
//On s'assure que h est entre 0 et 255 - sinon erreur
h = Math.max(0, Math.min(255, h));
//On obtient la couleur hsv du point sur le scan
return Color.hsb(h, 1, 1);
}
Тем не менее, когда диаграмма имеет свои пропорции создания, она работает хорошо, но когда я хочу расширить фрейм, узел, представленный прямоугольником, тоже не расширяется, тогда он создает пустой между узлами. Должен ли я сделать это по-другому, например, путем создания изображения? Или есть способ сделать это?