Получите GridPane для правильного заполнения окна в JavaFXJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Получите GridPane для правильного заполнения окна в JavaFX

Сообщение Anonymous »

Я пытаюсь сделать очень простую вещь в JavaFX. Я хочу иметь окно с VBox с кнопками слева, HBox с кнопками сверху, а остальное заполняется сеткой, содержащей переменное количество прямоугольников.
Я поставил три элементов в BorderBox, я вычисляю ширину каждого прямоугольника в соответствии с размером GridPane, но когда я запускаю приложение, мне всегда приходится изменять размер окна, перетаскивая его из нижнего правого угла, чтобы отобразить всю GridPane (есть около 3 строки и 3 столбца вне поля зрения).
В этом примере пусть окно будет иметь фиксированный размер, как указано. Кроме того, когда установлены сцены и ширина/высота блоков, когда я вызываю GridPane.getHeight() и GridPane.getWidth(), это показывает мне, что это квадратично (660x660, что не должно иметь значения, потому что способ расчета, даже если это не так, он должен хотя бы заполняться до нижней или правой стороны и не переливаться).
Есть идеи, как это можно исправить?

Код: Выделить всё

@Override
public void start(Stage primaryStage) throws Exception {
//primaryStage.setResizable(false);

BorderPane mainPane = new BorderPane();
HBox topBox = new HBox(10);
VBox leftBox = new VBox(10);
GridPane gridPane = new GridPane();

mainPane.setTop(topBox);
mainPane.setLeft(leftBox);
mainPane.setCenter(gridPane);
leftBox.setBorder(new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID,null,new BorderWidths(1))));
topBox.setBorder(new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID,null,new BorderWidths(1))));
leftBox.setPrefWidth(180);
topBox.setPrefHeight(40);
//TopBox
Button tb1 = new Button("TB 1");
Button tb2 = new Button("TB 2");
topBox.getChildren().addAll(tb1,tb2);

//LeftBox
Button lb1 = new Button("LB 1");
Button lb2 = new Button("LB 2");
Button lb3 = new Button("LB 3");
leftBox.getChildren().addAll(lb1,lb2,lb3);

Scene mainScene = new Scene(mainPane, 840,700);
primaryStage.setScene(mainScene);
primaryStage.show();

int rectangleAmountPerRowCol = 50;
double rectangleWidth = Math.min(gridPane.getWidth()/rectangleAmountPerRowCol,gridPane.getHeight()/rectangleAmountPerRowCol);

for(int k = 0; k < rectangleAmountPerRowCol; k++) {
for (int i = 0; i < rectangleAmountPerRowCol; i++) {
Rectangle r = new Rectangle(rectangleWidth, rectangleWidth);
r.setStroke(Color.RED);
r.setStrokeWidth(0.1);
gridPane.add(r, i, k);

}
}

}
Я пытался изменить размеры объектов, пытался привязать размер области сетки к другим компонентам, пытался работать с Column и RowConstraints, но безрезультатно. Я просто не понимаю, почему на моем показании, например. ширина GridPane и ширина левого VBox точно равны ширине окна, но при запуске этого не происходит.
Большое спасибо!
Thruzzd

Подробнее здесь: https://stackoverflow.com/questions/786 ... -in-javafx
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»