如何使用Scene Builder在JavaFX表中平均设置列宽?

时间:2018-09-27 15:48:25

标签: javafx scenebuilder

我正在使用Scene Builder在Java Fx中构建表。该表的父级是一个网格窗格。通常,我使用计算行的大小,列的最小宽度,首选宽度和最大宽度来平均调整网格内部组件之间的空间。我根据需要的用途使用了Hgrow。但是无法设置计算出的大小来调整表中各列之间的空间,因为设置后该列将消失。只能应用固定大小来调整列。但是,当应用固定大小时,空间不会自动自动平均调整。如何设置计算后的大小以均匀分布表中各列中的空间?

 <GridPane style="-fx-background-color: #fff;" GridPane.columnSpan="3" GridPane.rowIndex="1">
      <columnConstraints>
          <ColumnConstraints halignment="CENTER" hgrow="ALWAYS" />
          </columnConstraints>
               <rowConstraints>
                 <RowConstraints vgrow="ALWAYS" />
                 </rowConstraints>
                    <GridPane.margin>
                       <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
                     </GridPane.margin>
                           <children>
                              <TableView fx:id="TB_CourseTable" prefHeight="200.0" prefWidth="200.0">
                                <columns>
                                    <TableColumn fx:id="TC_SchoolID" prefWidth="75.0" text="SCHOOL ID" />
                                  <TableColumn fx:id="TC_ID" maxWidth="1.7976931348623157E308" minWidth="-Infinity" prefWidth="51.0" text="ID" />
                                    <TableColumn fx:id="TC_Session" minWidth="0.0" prefWidth="103.0" text="SESSION" />
                                  <TableColumn fx:id="TC_CourseCategory" maxWidth="1.7976931348623157E308" minWidth="-1.0" prefWidth="149.0" text="COURSE CATEGORY" />
                                    <TableColumn fx:id="TC_CourseName" maxWidth="1.7976931348623157E308" minWidth="-1.0" prefWidth="200.0" text="COURSE NAME" />
                                    <TableColumn fx:id="TC_Year" prefWidth="75.0" text="YEAR" />
                                    <TableColumn fx:id="TC_StartDate" maxWidth="1.7976931348623157E308" minWidth="-1.0" prefWidth="152.0" text="START DATE" />
                                    <TableColumn fx:id="TC_EndDate" maxWidth="1.7976931348623157E308" minWidth="-1.0" prefWidth="152.0" text="END DATE" />
                                    <TableColumn fx:id="TC_IsActive" maxWidth="1.7976931348623157E308" minWidth="-1.0" prefWidth="117.0" text="IS ACTIVE" />
                                </columns>
                              </TableView>
                           </children>
                        </GridPane>

1 个答案:

答案 0 :(得分:1)

当您开始设置min,max和pref width时,所有列均等距分布,它将限制该列,因此当您继续添加内容时,下次有越来越多的约束时,只需尝试从fxml中删除所有大小调整即可等间距地放置某些东西,除非对象上没有约束,否则Java通常会尝试将它们默认为默认值

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

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane style="-fx-background-color: #fff;" GridPane.columnSpan="3" GridPane.rowIndex="1" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
    <columnConstraints>
        <ColumnConstraints halignment="CENTER" hgrow="ALWAYS" />
    </columnConstraints>
    <rowConstraints>
        <RowConstraints vgrow="ALWAYS" />
    </rowConstraints>
    <GridPane.margin>
        <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
    </GridPane.margin>
    <children>
        <TableView fx:id="TB_CourseTable">
            <columns>
                <TableColumn fx:id="TC_SchoolID" text="SCHOOL ID" />
                <TableColumn fx:id="TC_ID" text="ID" />
                <TableColumn fx:id="TC_Session" text="SESSION" />
                <TableColumn fx:id="TC_CourseCategory" text="COURSE CATEGORY" />
                <TableColumn fx:id="TC_CourseName" text="COURSE NAME" />
                <TableColumn fx:id="TC_Year" text="YEAR" />
                <TableColumn fx:id="TC_StartDate" text="START DATE" />
                <TableColumn fx:id="TC_EndDate" text="END DATE" />
                <TableColumn fx:id="TC_IsActive" text="IS ACTIVE" />
            </columns>
        </TableView>
    </children>
</GridPane>