Может ли сетка автоматически изменять размеры своих объектов? Попытка установить max_width и max_height для сетки и изменить размер содержимого. JavaFX - PullRequest
3 голосов
/ 23 марта 2012

У меня простой вопрос. Может ли сетка автоматически изменять размеры объектов в ней, чтобы соответствовать сетке?

Я хочу установить max_height и max_width для сетки, а также min-width и min-height и центрировать эту сетку в моем окне.

В моей сетке я хочу добавить Spacer Square во всех точках. У каждой проставки есть граница. Так что это будет выглядеть как фактическая сетка.

Если моя сетка 4х4, я хочу, чтобы было 16 больших квадратов.

Если моя сетка 16x18, я хочу, чтобы было 288 квадратов.

Обе опции должны занимать область заданного количества, опция 288 квадратов имеет квадраты намного меньше, чем опция 16, чтобы соответствовать размерам моей сетки.

Я проверил документацию по сетке, но растерялся, если есть опция для меня. Я не знаю разницы между отступами, полями, setmaxwidth, setmaxheight (пробовал, ничего не менял).

double dimension_x=100; //max_width of actual square/spacer/gridspace
double dimension_y=100; //max_height of actual square/spacer/gridspace

int grid_x=100; //number of rows
int grid_y=100; //number of columns
Rectangle[][] rectangles = new Rectangle[grid_x][grid_y];

GridPane grid = new GridPane();
double grid_max_x=800;
double grid_max_y=600;
grid.setHgap(1);
grid.setVgap(1);
grid.setPadding(new Insets(16)); //not sure what this does. Attempt Fail
grid.setEffect(addEffect(Color.web("#202C2F"), .61, 12));
grid.setMaxHeight(grid_max_y); //does nothing that it APPEARS to me

for (int x=0;x<grid_x;x++)
{
    for(int y=0;y<grid_y;y++)
    {
        Rectangle temp = new Rectangle(dimension_x,dimension_y);
        grid.add(temp,x,y);
    }
}

1 Ответ

5 голосов
/ 23 марта 2012

Если вы хотите поле прямоугольников с изменяемым размером, вам не нужна сетка.Просто поместите их на панель и привяжите к размеру панели:

public void start(Stage stage) {
    Pane root = new Pane();

    final int count = 7; //number of rectangles

    NumberBinding minSide = Bindings
            .min(root.heightProperty(), root.widthProperty())
            .divide(count);

    for (int x = 0; x < count; x++) {
        for (int y = 0; y < count; y++) {
            Rectangle rectangle = new Rectangle(0, 0, Color.LIGHTGRAY);

            rectangle.xProperty().bind(minSide.multiply(x));
            rectangle.yProperty().bind(minSide.multiply(y));
            rectangle.heightProperty().bind(minSide.subtract(2));
            rectangle.widthProperty().bind(rectangle.heightProperty());
            root.getChildren().add(rectangle);
        }
    }

    stage.setScene(new Scene(root, 500, 500));
    stage.show();
}
...