У меня есть цель создать поле из шестиугольных плиток. Я дошел до того, что у меня есть матрица ячеек, каждая из которых достаточно высока, чтобы вместить весь шестиугольник:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class UITest extends Application {
final private static String TILE_IMAGE_LOCATION = System.getProperty("user.dir") + File.separatorChar +"resources"+ File.separatorChar + "blueTile.png";
final private static Image HEXAGON_IMAGE = initTileImage();
private static Image initTileImage() {
try {
return new Image(new FileInputStream(new File(TILE_IMAGE_LOCATION)));
} catch (FileNotFoundException e) {
throw new IllegalStateException(e);
}
}
public void start(Stage primaryStage) {
int height = 4;
int width = 6;
GridPane tileMap = new GridPane();
Scene content = new Scene(tileMap, 800, 600);
primaryStage.setScene(content);
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
ImageView tile = new ImageView(HEXAGON_IMAGE);
GridPane.setConstraints(tile, x, y);
tileMap.getChildren().add(tile);
}
}
primaryStage.show();
}
}
Моя проблема не в вертикальном зазоре, который я точно могу определить, добавив vGap()
GridPane к правильному значению. Для меня сложность заключается в смещении каждого второго ряда на половину ширины ячейки вправо.
Я попытался положить две GridPanes поверх друг друга, одна из которых содержит нечетные, а другая четные строки, с целью добавить отступы к одной из них, полностью сдвинув ее. Однако, насколько мне известно, для этого нет способа, как и вложение GridPanes в другое.
Как лучше всего добиться сдвига только в каждом втором ряду?
(изображение, на которое я ссылаюсь в коде, ожидаемом в папке ${projectroot}/resources/
: )