После долгого тестирования я получил следующее:
public class GamePanel extends HBox{
Pane leftPanel, rightPanel, iLeft, iRight;
VBox boardBox;
public GamePanel() {
this.setMinHeight(400);
iLeft = new Pane();
boardBox = new VBox();
iRight = new Pane();
boardBox.alignmentProperty().set(Pos.CENTER);
this.alignmentProperty().set(Pos.CENTER);
leftPanel = new Pane();
rightPanel = new Pane();
leftPanel.setBorder(new Border(new BorderStroke(Color.DARKRED, BorderStrokeStyle.SOLID,
CornerRadii.EMPTY,new BorderWidths(1))));
rightPanel.setBorder(new Border(new BorderStroke(Color.DARKRED, BorderStrokeStyle.SOLID,
CornerRadii.EMPTY,new BorderWidths(1))));
rightPanel.setPrefWidth(0);
leftPanel.setPrefWidth(0);
iRight.getChildren().add(new Button("testtesttest"));
rightPanel.getChildren().add(iRight);
HBox.setHgrow(leftPanel, Priority.ALWAYS);
HBox.setHgrow(rightPanel, Priority.ALWAYS);
StackPane board = new StackPane(new Rectangle(100,100,Color.RED));
board.setBorder(new Border(new BorderStroke(Color.DARKBLUE, BorderStrokeStyle.DASHED,
CornerRadii.EMPTY,new BorderWidths(1))));
final NumberBinding binding = Bindings.min(widthProperty(), heightProperty());
boardBox.prefWidthProperty().bind(binding);
boardBox.prefHeightProperty().bind(binding);
boardBox.setMaxSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE);
VBox.setVgrow(board, Priority.ALWAYS);
boardBox.getChildren().add(board);
getChildren().addAll(leftPanel, boardBox, rightPanel);
//HBox.setHgrow(this, Priority.ALWAYS);
}
}
Это решение включает в себя установку prefWidth
левой и правой панелей на ноль, а затем добавление внутренних панелей в каждую панель, содержимое которой затем добавляется к. Я думаю, причина того, что это работает, заключается в том, что для prefWidth выделяется пространство до того, как размер панели будет расширен ограничением Hgrow. Поскольку HBox добавляет равное количество места к каждой панели, панель с большей prefWidth становится больше. Если установить оба значения в ноль, они оба начинаются без prefWidth и, таким образом, имеют одинаковый размер. Я считаю, что именно поэтому ответ anko , похоже, сработал - потому что, когда они начинаются с равными prefWidths и к каждому добавляется одинаковое количество места, они имеют одинаковый размер. Однако установка prefWidth равная 100 не соответствует размеру boardBox
(делает его не квадратом), когда ширина рабочей области уменьшается как можно меньше.
Я уверен, что есть лучший способ сделайте это, и я буду рад принять лучший ответ.