首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在BorderPane中添加另一个元素会破坏我的格式?

为什么在BorderPane中添加另一个元素会破坏我的格式?
EN

Stack Overflow用户
提问于 2022-09-06 07:31:18
回答 1查看 79关注 0票数 2

在GridPane中心创建BorderPane时,它是二次型的,一切都很好:

即使在有大量列和行的情况下,一切都是完美的:

但是,当我将一个VBox或任何其他元素添加到BorderPane的左边插槽时,如下所示:

我需要GridPane保持二次型,至少在创建之后是如此。当调整大小时,单元格保持二次型并不重要,但它们在本质上应该是。

我还尝试将GridPane封装在VBox中,将VBox封装在HBox中,并绑定它们的高度和宽度属性,但这只会使单元格保持相同的大小。

基本上,我想让它看起来像这样:

我认为,如果有可能告诉GridPane不要往上、往下、坐着填补空位,那就很容易了。

fxml文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.*?>

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gui.UserInterfaceController">
   <center>
      <GridPane fx:id="grdPn" gridLinesVisible="true" onMouseClicked="#onGrdPnMouseClicked">
        <columnConstraints>
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="30.0" />
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="30.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="30.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="30.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="30.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="30.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="30.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="30.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="30.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="30.0" />

      
      
        </columnConstraints>
        <rowConstraints>
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
        </rowConstraints>
      </GridPane>
   </center>
   <left>
      <VBox prefHeight="306.0" prefWidth="100.0" BorderPane.alignment="CENTER" />
   </left>
</BorderPane>

创造舞台和场景:

代码语言:javascript
复制
        FXMLLoader fxmlLoader = new FXMLLoader(ApplicationMain.class.getResource("sample.fxml"));
        Scene scene = new Scene(fxmlLoader.load());
        stage.setTitle("Example");
        stage.setScene(scene);
        stage.show();

如果删除VBox,则GridPane再次变为正方形。

编辑:我的工作是确保GridPane总是大于VBox,然后VBox将是改变大小的元素,GridPane的单元格将是二次型的。但是我尝试了下面标记的解决方案,它对我有效。

克莱奥帕特拉的建议也有很大帮助。谢谢大家。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-06 20:38:44

下面是一个我希望能帮助你的例子。我猜GridPane Max Height = USE_PREF_SIZE是你要找的东西。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<BorderPane xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" maxHeight="-Infinity" maxWidth="-Infinity" fx:controller="gui.UserInterfaceController">
   <left>
      <VBox prefHeight="306.0" prefWidth="100.0" style="-fx-border-color: black;" BorderPane.alignment="CENTER">
         <BorderPane.margin>
            <Insets bottom="10.0" left="10.0" top="10.0" />
         </BorderPane.margin>
      </VBox>
   </left>
   <center>
      <GridPane fx:id="grdPn" gridLinesVisible="true" maxHeight="-Infinity" onMouseClicked="#onGrdPnMouseClicked" BorderPane.alignment="CENTER">
         <columnConstraints>
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="40.0" />
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="40.0" />
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="40.0" />
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="40.0" />
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="40.0" />
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="40.0" />
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="40.0" />
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="40.0" />
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="40.0" />
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="40.0" />
         </columnConstraints>
         <rowConstraints>
            <RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="40.0" vgrow="SOMETIMES" />
            <RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="40.0" vgrow="SOMETIMES" />
         </rowConstraints>
         <BorderPane.margin>
            <Insets right="10.0" />
         </BorderPane.margin>
      </GridPane>
   </center>
</BorderPane>

输出

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73618261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档