我一直在try 制作一个简单的用户界面,在BorderLayout的顶部部分有一个菜单栏,在中央部分有4个表视图.我想要的是,这4个表应该显示像一个2x2矩阵.我的意思是2行2列,然后这些表格应该根据屏幕大小或我调整框架的大小而增大和缩小.

表的视图和高度的增长和缩小都很好.但是我不能调整宽度.我想要的是,我想要一个响应性的桌子设计.当我调整框架的大小时,表格的高度和宽度应该会增大和缩小.高度部分工作正常,但我无法实现宽度的这一功能.

以下是我的FXML代码

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>

<BorderPane xmlns="http://javafx.com/javafx/20.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.ui_designs.HelloController">
    <top>
        <MenuBar BorderPane.alignment="CENTER">
            <menus>
                <Menu mnemonicParsing="false" text="Bills">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Walk In Bill" />
                        <MenuItem mnemonicParsing="false" text="Account Holder Bill" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Stock">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Add New Product" />
                        <MenuItem mnemonicParsing="false" text="Purchase Request" />
                        <MenuItem mnemonicParsing="false" text="Stock Arrival" />
                        <MenuItem mnemonicParsing="false" text="Stcok Exchange" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Accounts">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Add Account Holder" />
                        <MenuItem mnemonicParsing="false" text="Account Holder's Transactions" />
                        <MenuItem mnemonicParsing="false" text="Company Accounts" />
                        <MenuItem mnemonicParsing="false" text="Company Transactions" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Reports">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Daily Report" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="About">
                    <items>
                        <MenuItem mnemonicParsing="false" text="About" />
                    </items>
                </Menu>
            </menus>
        </MenuBar>
    </top>
    <center>
        <VBox alignment="CENTER" spacing="10.0" BorderPane.alignment="CENTER">
            <HBox spacing="10.0">
                <!-- First VBox with TableView -->
                <VBox spacing="10.0">
                    <children>
                        <Label text="Table 1 Heading" />
                        <TableView>
                            <columns>
                                <TableColumn text="Column 1" />
                                <TableColumn text="Column 2" />
                            </columns>
                        </TableView>
                    </children>
                </VBox>

                <!-- Second VBox with TableView -->
                <VBox spacing="10.0">
                    <children>
                        <Label text="Table 2 Heading" />
                        <TableView>
                            <columns>
                                <TableColumn text="Column 1" />
                                <TableColumn text="Column 2" />
                            </columns>
                        </TableView>
                    </children>
                </VBox>
            </HBox>
         <HBox spacing="10.0">
            <children>
               <VBox spacing="10.0">
                  <children>
                     <Label text="Table 1 Heading" />
                     <TableView>
                        <columns>
                           <TableColumn text="Column 1" />
                           <TableColumn text="Column 2" />
                        </columns>
                     </TableView>
                  </children>
               </VBox>
               <VBox spacing="10.0">
                  <children>
                     <Label text="Table 2 Heading" />
                     <TableView>
                        <columns>
                           <TableColumn text="Column 1" />
                           <TableColumn text="Column 2" />
                        </columns>
                     </TableView>
                  </children>
               </VBox>
            </children>
         </HBox>
        </VBox>
    </center>
</BorderPane>

推荐答案

fillWidth="true"加到所有VBox个实例上,并将HBox.hgrow="ALWAYS"加到四个"内部"VBox实例上:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>

<BorderPane xmlns="http://javafx.com/javafx/20.0.1" xmlns:fx="http://javafx.com/fxml/1" >
    <top>
        <MenuBar BorderPane.alignment="CENTER">
            <menus>
                <Menu mnemonicParsing="false" text="Bills">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Walk In Bill" />
                        <MenuItem mnemonicParsing="false" text="Account Holder Bill" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Stock">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Add New Product" />
                        <MenuItem mnemonicParsing="false" text="Purchase Request" />
                        <MenuItem mnemonicParsing="false" text="Stock Arrival" />
                        <MenuItem mnemonicParsing="false" text="Stcok Exchange" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Accounts">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Add Account Holder" />
                        <MenuItem mnemonicParsing="false" text="Account Holder's Transactions" />
                        <MenuItem mnemonicParsing="false" text="Company Accounts" />
                        <MenuItem mnemonicParsing="false" text="Company Transactions" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Reports">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Daily Report" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="About">
                    <items>
                        <MenuItem mnemonicParsing="false" text="About" />
                    </items>
                </Menu>
            </menus>
        </MenuBar>
    </top>
    <center>
        <VBox alignment="CENTER" spacing="10.0" BorderPane.alignment="CENTER" fillWidth="true">
            <HBox spacing="10.0">
                <!-- First VBox with TableView -->
                <VBox spacing="10.0" fillWidth="true" HBox.hgrow="ALWAYS">
                    <children>
                        <Label text="Table 1 Heading" />
                        <TableView>
                            <columns>
                                <TableColumn text="Column 1" />
                                <TableColumn text="Column 2" />
                            </columns>
                        </TableView>
                    </children>
                </VBox>

                <!-- Second VBox with TableView -->
                <VBox spacing="10.0" fillWidth="true" HBox.hgrow="ALWAYS">
                    <children>
                        <Label text="Table 2 Heading" />
                        <TableView>
                            <columns>
                                <TableColumn text="Column 1" />
                                <TableColumn text="Column 2" />
                            </columns>
                        </TableView>
                    </children>
                </VBox>
            </HBox>
            <HBox spacing="10.0">
                <children>
                    <VBox spacing="10.0" fillWidth="true" HBox.hgrow="ALWAYS">
                        <children>
                            <Label text="Table 1 Heading" />
                            <TableView>
                                <columns>
                                    <TableColumn text="Column 1" />
                                    <TableColumn text="Column 2" />
                                </columns>
                            </TableView>
                        </children>
                    </VBox>
                    <VBox spacing="10.0" fillWidth="true" HBox.hgrow="ALWAYS">
                        <children>
                            <Label text="Table 2 Heading" />
                            <TableView>
                                <columns>
                                    <TableColumn text="Column 1" />
                                    <TableColumn text="Column 2" />
                                </columns>
                            </TableView>
                        </children>
                    </VBox>
                </children>
            </HBox>
        </VBox>
    </center>
</BorderPane>

通常,GridPane比嵌套HBoxVBox实例更容易:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>

<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.RowConstraints?>
<BorderPane xmlns="http://javafx.com/javafx/20.0.1" xmlns:fx="http://javafx.com/fxml/1" >
    <top>
        <MenuBar BorderPane.alignment="CENTER">
            <menus>
                <Menu mnemonicParsing="false" text="Bills">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Walk In Bill" />
                        <MenuItem mnemonicParsing="false" text="Account Holder Bill" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Stock">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Add New Product" />
                        <MenuItem mnemonicParsing="false" text="Purchase Request" />
                        <MenuItem mnemonicParsing="false" text="Stock Arrival" />
                        <MenuItem mnemonicParsing="false" text="Stcok Exchange" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Accounts">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Add Account Holder" />
                        <MenuItem mnemonicParsing="false" text="Account Holder's Transactions" />
                        <MenuItem mnemonicParsing="false" text="Company Accounts" />
                        <MenuItem mnemonicParsing="false" text="Company Transactions" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Reports">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Daily Report" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="About">
                    <items>
                        <MenuItem mnemonicParsing="false" text="About" />
                    </items>
                </Menu>
            </menus>
        </MenuBar>
    </top>
    <center>
        <GridPane alignment="CENTER" hgap="10.0" vgap="10"  BorderPane.alignment="CENTER">
            <columnConstraints>
                <ColumnConstraints fillWidth="true" hgrow="ALWAYS"/>
                <ColumnConstraints fillWidth="true" hgrow="ALWAYS"/>
            </columnConstraints>
            <rowConstraints>
                <RowConstraints/>
                <RowConstraints fillHeight="true" vgrow="ALWAYS"/>
                <RowConstraints/>
                <RowConstraints fillHeight="true" vgrow="ALWAYS"/>
            </rowConstraints>
            <children>
                <Label text="Table 1 Heading" GridPane.columnIndex="0" GridPane.rowIndex="0" />
                <TableView GridPane.columnIndex="0" GridPane.rowIndex="1">
                    <columns>
                        <TableColumn text="Column 1" />
                        <TableColumn text="Column 2" />
                    </columns>
                </TableView>
                <Label text="Table 2 Heading" GridPane.columnIndex="1" GridPane.rowIndex="0"/>
                <TableView GridPane.columnIndex="1" GridPane.rowIndex="1">
                    <columns>
                        <TableColumn text="Column 1" />
                        <TableColumn text="Column 2" />
                    </columns>
                </TableView>
                <Label text="Table 1 Heading" GridPane.columnIndex="0" GridPane.rowIndex="2"/>
                <TableView GridPane.columnIndex="0" GridPane.rowIndex="3">
                    <columns>
                        <TableColumn text="Column 1" />
                        <TableColumn text="Column 2" />
                    </columns>
                </TableView>
                <Label text="Table 2 Heading" GridPane.columnIndex="1" GridPane.rowIndex="2"/>
                <TableView GridPane.columnIndex="1" GridPane.rowIndex="3">
                    <columns>
                        <TableColumn text="Column 1" />
                        <TableColumn text="Column 2" />
                    </columns>
                </TableView>
            </children>
        </GridPane>
    </center>
</BorderPane>

Java相关问答推荐

如何用javac编译Java类,即使对像java.lang.*这样的基本类也没有任何依赖关系?

如何在返回bigint []值的子查询中使用any?

从技术上讲,OPC UA客户端是否可以通过转发代理将请求通过 tunel 发送到OPC UA服务器?

Apache POI:使用反射获取zoom 级别

Java函数式编程中的双值单值映射

Java Swing:初始化身份验证类后未检测到ATM_Interface键事件

测试何时使用Mockito强制转换对象会导致ClassCastException

搜索列表返回多个频道

Domino Designer 14中的保存代理添加了重影库

如何在Cosmos DB(Java SDK)中增加默认响应大小

有效的公式或值列表必须少于或等于255个字符

扩展视图高度,并将其拖动到较低的视图上,而不是将其向下推?

Android Java:已设置但未读取SharedPreferences

根本不显示JavaFX阿拉伯字母

Java List有一个在一个位置添加多个元素的方法,但我找不到一个在一个位置删除多个元素的方法

在具有Quarkus Panache的PostgreSQL中将JSON数据存储为JSONB时,会将其存储为转义字符串

如何使用jOOQ在PostgreSQL中从枚举类型生成Java枚举

[jdk21][Foreign Function&;Memory API]MemoryLayout::varHandle通过可变数组进行 struct 化的问题

[Guice/MissingImplementation]:未绑定任何实现

Spring Boot应用程序中的自定义constraintvalidator不会被调用