[英]HBox doesn't fill the available space in center of borderpane
I placed an HBox
into the center of a BorderPane
, that is the only direct Node
on a DialogPane
of my Dialog
by using this code: 我使用以下代码将HBox
放置在BorderPane
的中心,这是Dialog
的DialogPane
上的唯一直接Node
:
public GameDialog(Player[] players) {
setTitle("Spiel eintragen");
setWidth(WIDTH);
setHeight(HEIGHT);
createLeftBox();
createRightBox(players);
// Center
this.center = new HBox(leftBox, rightBox);
center.setStyle("-fx-border-color: #00ff00;");
center.getChildren()
.forEach(b -> HBox.setMargin(b, INSETS));
// Bottom
this.btnOk = new Button("ok");
this.btnCancel = new Button("abbrechen");
this.bottom = new HBox(btnOk, btnCancel);
bottom.getChildren()
.forEach(b -> HBox.setMargin(b, INSETS));
// Pane
this.pane = new BorderPane(center);
pane.setBottom(bottom);
pane.setPrefSize(WIDTH, HEIGHT);
getDialogPane().setPrefSize(WIDTH, HEIGHT);
getDialogPane().getChildren().add(pane);
...
}
private void createLeftBox() {
// Points spinner
List<Integer> points = Stream.iterate(0, Util::increment)
.limit(MAX_POINTS)
.collect(Collectors.toList());
this.spPoints = new Spinner<>(observableArrayList(points));
// Solo combobox
List<Solotype> soli = Arrays.asList(Solotype.values());
this.cbSolo = new ComboBox<>(observableArrayList(soli));
cbSolo.setOnAction(e -> changed());
// Bock checkbox
this.chBock = new CheckBox("Bock");
// Left box
leftBox = new VBox(spPoints, cbSolo, chBock);
leftBox.getChildren()
.forEach(n -> VBox.setMargin(n, INSETS));
leftBox.setStyle("-fx-border-color: #ff0000");
}
private void createRightBox(Player[] players) {
List<Player> playerlist = Arrays.asList(players);
// Right box
rightBox = new VBox();
List<Node> rightChildren = rightBox.getChildren();
this.playerBoxes = playerlist.stream()
.collect(toMap(p -> p,
p -> new HBox(4)));
this.players = playerlist.stream()
.collect(toMap(p -> p,
this::createToggleGroup));
playerBoxes.values()
.stream()
.peek(rightChildren::add)
.forEach(b -> VBox.setMargin(b, INSETS));
rightBox.setStyle("-fx-border-color: #ff0000");
}
My class GameDialog
extends the javafx-class Dialog<R>
. 我的类GameDialog
扩展了javafx类Dialog<R>
。 However the HBox
in the center of the BorderPane
doesn't fill all of the available space. 但是,位于BorderPane
中心的HBox
不会填充所有可用空间。 It just looks like this: 它看起来像这样:
I tried to setMinWidth, setMinHeight, setPrefSize, setFillWidth(true) and setFillHeight(true) on several of the H- and VBoxes. 我试图在几个H-Box和VBoxes上设置setMinWidth,setMinHeight,setPrefSize,setFillWidth(true)和setFillHeight(true)。 Nothing Changed. 没有改变。 I just don't understand this behaviour. 我只是不了解这种行为。 Any ideas? 有任何想法吗?
I couldn't fully recreate your example (since some code is missing, I used TextField
instead of those toggle groups), but had some success with this solution. 我无法完全重新创建您的示例(由于缺少一些代码,因此我使用了TextField
而不是那些切换组),但是此解决方案取得了一些成功。
Instead of using: 而不是使用:
getDialogPane().getChildren().add(pane);
use: 采用:
getDialogPane().setContent(pane);
And the controls should use all the available space. 并且控件应使用所有可用空间。
(I also removed the setting of the preferred width and height, so the image was a little smaller. Setting the preferred size of the pane
doesn't change anything any ways.) (我还删除了首选宽度和高度的设置,因此图像要小一些。设置pane
的首选大小不会改变任何方式。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.