gpt4 book ai didi

JavaFX 在 HBox 的两个侧面板之间均匀分割空间

转载 作者:行者123 更新时间:2023-12-01 16:31:35 25 4
gpt4 key购买 nike

我有一个 HBox,其中心包含一个方形 VBox。 HBox 的宽度可以大于其高度,从而在侧面留出额外的空间。我想用单独的 VBox 填充左侧和右侧的额外空间,我将在其中放置按钮、信息等。我希望这两个 VBox(“侧面板”)始终具有相同的宽度。但是,如下图所示,当右侧面板有按钮而左侧面板没有按钮时,它会比左侧面板宽: enter image description here

我以为

rightPanel.minWidthProperty().bindBidirectional(leftPanel.minWidthProperty());
rightPanel.prefWidthProperty().bindBidirectional(leftPanel.prefWidthProperty());

本来可以解决问题,但没有。

这是我的代码:

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.NumberBinding;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Control;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.BorderWidths;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class FX010 extends Application{
public static void main(String[] args) {
Application.launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
GamePanel gp = new GamePanel();
Scene scene = new Scene(gp, 800, 600);

primaryStage.setTitle("testing");
primaryStage.minWidthProperty().bind(primaryStage.heightProperty());
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();
}
public class GamePanel extends HBox{
public GamePanel() {
this.setMinHeight(400);
final VBox boardBox = new VBox();

boardBox.alignmentProperty().set(Pos.CENTER);
this.alignmentProperty().set(Pos.CENTER);


VBox leftPanel, rightPanel;
leftPanel = new VBox();
rightPanel = new VBox();
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.minWidthProperty().bindBidirectional(leftPanel.minWidthProperty());
rightPanel.prefWidthProperty().bindBidirectional(leftPanel.prefWidthProperty());
rightPanel.getChildren().add(new Button("testtesttest"));

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);
}
}
}

如何强制 leftPanel 始终与 rightPanel 具有相同的宽度,同时仍确保 boardBox 始终为正方形?

谢谢!

最佳答案

当你添加 e 时它就起作用了。例如:

leftPanel.setPrefWidth(100d);
rightPanel.setPrefWidth(100d);

编辑:如果您使用 GridPane 作为根布局,您可以在其中使用具有固定百分比宽度(如 e)的三列,也许会更好。例如:15 %(左侧)、70 %(中心)和 15 %(右侧)。但只有您才能知道并决定什么最适合您的项目。 :-P

关于JavaFX 在 HBox 的两个侧面板之间均匀分割空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62031047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com