JavaFX 主 fxml 未加载 fxml

标签 java javafx javafx-2 fxml fxmlloader

我的应用程序有选项卡式 Pane ,因此为了保持 fxml 文件易于管理,我有一个包含选项卡的主 fxml 文件,以及每个其他选项卡的单独 fxml 文件。这工作正常,但由于某种原因,应用程序已停止加载第二个选项卡。我尝试在主应用程序中单独加载它,效果很好。我尝试创建一个新的 fxml 文件作为测试,然后加载它,这也有效。但是,它不会将其加载到第二个选项卡中。此外,控制台没有输出。

编辑:经过更多试验,我已将其范围缩小到分割 Pane 。我尝试了一个非常简单的带有按钮的 fxml,这很好,但是添加一个分割 Pane 和两个按钮,并且 View 不会呈现。

这是我的主要类(class): 公共(public)类 Main 扩展应用程序 {

@Override
public void start(Stage primaryStage) {

    Parent mainView;
    try {
        mainView = FXMLLoader.load(getClass().getResource("view/MainView.fxml"));
        Scene scene = new Scene(mainView);
        primaryStage.setTitle("Horse Show Manager");
        primaryStage.setScene(scene);
        primaryStage.show();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
public static void main(String[] args) {
    launch(args);
}
}

这是我的 mainview.fxml

<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.GridPane?>


<TabPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0"
    prefWidth="800.0" tabClosingPolicy="UNAVAILABLE" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
    <tabs>
        <Tab text="Classes">
            <fx:include source="GroupPane.fxml" fx:id="groupPaneContent" />
        </Tab>
        <Tab text="Riders">
            <fx:include source="RiderPane.fxml" fx:id="riderPaneContent" />
        </Tab>
    </tabs>
</TabPane>

这是第一个 Pane

<?import javafx.collections.*?>
<?import javafx.geometry.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.collections.FXCollections?>

<SplitPane dividerPositions="0.4" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
    fx:controller="application.view.GroupPaneController">
    <items>
        <TableView fx:id="table" editable="true" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
            AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <columnResizePolicy>
                <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
            </columnResizePolicy>
            <columns>
                <TableColumn fx:id="groupNumberColumn" editable="false" prefWidth="40.0" text="Class Number" />
                <TableColumn fx:id="groupNameColumn" editable="false" prefWidth="40.0" text="Class Name" />
            </columns>
        </TableView>
        <GridPane alignment="CENTER">
            <columnConstraints>
                <ColumnConstraints hgrow="NEVER" />
                <ColumnConstraints hgrow="ALWAYS" />
            </columnConstraints>
            <rowConstraints>
                <RowConstraints minHeight="10.0" vgrow="NEVER" />
                <RowConstraints vgrow="NEVER" />
                <RowConstraints vgrow="NEVER" />
                <RowConstraints vgrow="NEVER" />
                <RowConstraints vgrow="NEVER" />
                <RowConstraints vgrow="NEVER" />
                <RowConstraints vgrow="ALWAYS" />
            </rowConstraints>
            <children>
                <Label text="Number">
                    <GridPane.margin>
                        <Insets bottom="10.0" left="5.0" right="5.0" top="10.0" />
                    </GridPane.margin>
                </Label>
                <Label text="Extra Money" GridPane.rowIndex="4">
                    <GridPane.margin>
                        <Insets bottom="10.0" left="5.0" right="5.0" top="10.0" />
                    </GridPane.margin>
                </Label>
                <Label text="Fee" GridPane.rowIndex="3">
                    <GridPane.margin>
                        <Insets bottom="10.0" left="5.0" right="5.0" top="10.0" />
                    </GridPane.margin>
                </Label>
                <Label text="Gives Points" GridPane.rowIndex="5">
                    <GridPane.margin>
                        <Insets bottom="10.0" left="5.0" right="5.0" top="10.0" />
                    </GridPane.margin>
                </Label>
                <Label text="Name" GridPane.rowIndex="1">
                    <GridPane.margin>
                        <Insets bottom="10.0" left="5.0" right="5.0" top="10.0" />
                    </GridPane.margin>
                </Label>
                <Label text="Placing" GridPane.rowIndex="2">
                    <GridPane.margin>
                        <Insets bottom="10.0" left="5.0" right="5.0" top="10.0" />
                    </GridPane.margin>
                </Label>
                <HBox alignment="TOP_RIGHT" prefHeight="100.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="6">
                    <children>
                        <Button fx:id="addButton" mnemonicParsing="false" onAction="#groupAddOrEdit" text="Add">
                            <HBox.margin>
                                <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                            </HBox.margin>
                        </Button>
                        <Button fx:id="editButton" mnemonicParsing="false" onAction="#editing" text="Edit">
                            <HBox.margin>
                                <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                            </HBox.margin>
                        </Button>
                        <Button fx:id="deleteButton" mnemonicParsing="false" onAction= "#deleteGroup" text="Delete">
                            <HBox.margin>
                                <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                            </HBox.margin>
                        </Button>
                    </children>
                </HBox>
                <TextField fx:id="numberField" GridPane.columnIndex="1">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </TextField>
                <TextField fx:id="nameField" GridPane.columnIndex="1" GridPane.rowIndex="1">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </TextField>
                <TextField fx:id="feeField" GridPane.columnIndex="1" GridPane.rowIndex="3">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </TextField>
                <TextField fx:id="extraMoneyField" GridPane.columnIndex="1" GridPane.rowIndex="4">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </TextField>
                <ChoiceBox fx:id="givesPointsChoiceBox" maxWidth="1.7976931348623157E308" GridPane.columnIndex="1"
                    GridPane.hgrow="ALWAYS" GridPane.rowIndex="5">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                    <items>
                        <FXCollections fx:factory="observableArrayList">
                            <String fx:value="No" />
                            <String fx:value="Yes" />
                        </FXCollections>
                    </items>
                    <value>
                        <String fx:value="Yes" />
                    </value>
                </ChoiceBox>
                <ChoiceBox fx:id="gradingChoiceBox" maxWidth="1.7976931348623157E308" GridPane.columnIndex="1"
                    GridPane.rowIndex="2">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                    <items>
                        <FXCollections fx:factory="observableArrayList">
                            <String fx:value="Place" />
                            <String fx:value="Time" />
                            <String fx:value="Points" />
                        </FXCollections>
                    </items>
                    <value>
                        <String fx:value="Place" />
                    </value>
                </ChoiceBox>
            </children>
        </GridPane>
    </items>
</SplitPane>

第二个:

<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<SplitPane dividerPositions="0.5" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
    <items>
        <VBox>
            <children>
                <TableView VBox.vgrow="ALWAYS">
                    <columns>
                        <TableColumn prefWidth="75.0" text="C1" />
                        <TableColumn prefWidth="75.0" text="C2" />
                    </columns>
                    <VBox.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </VBox.margin>
                </TableView>
                <TableView VBox.vgrow="ALWAYS">
                    <columns>
                        <TableColumn prefWidth="75.0" text="C1" />
                        <TableColumn prefWidth="75.0" text="C2" />
                    </columns>
                    <VBox.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </VBox.margin>
                </TableView>
            </children>
        </VBox>
        <GridPane>
            <columnConstraints>
                <ColumnConstraints />
                <ColumnConstraints hgrow="NEVER" minWidth="0.0" />
                <ColumnConstraints hgrow="SOMETIMES" minWidth="0.0" />
            </columnConstraints>
            <rowConstraints>
                <RowConstraints minHeight="0.0" vgrow="NEVER" />
                <RowConstraints minHeight="0.0" vgrow="NEVER" />
                <RowConstraints minHeight="0.0" vgrow="NEVER" />
                <RowConstraints minHeight="0.0" vgrow="NEVER" />
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
                <RowConstraints minHeight="0.0" vgrow="SOMETIMES" />
                <RowConstraints minHeight="0.0" vgrow="NEVER" />
                <RowConstraints minHeight="0.0" vgrow="SOMETIMES" />
                <RowConstraints minHeight="0.0" vgrow="NEVER" />
            </rowConstraints>
            <children>
                <Label text="Number" GridPane.columnIndex="1">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </Label>
                <Label text="Name" GridPane.columnIndex="1" GridPane.rowIndex="1">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </Label>
                <Label text="Fee" GridPane.columnIndex="1" GridPane.rowIndex="2">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </Label>
                <Label text="Membership" GridPane.columnIndex="1" GridPane.rowIndex="3">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </Label>
                <TextField GridPane.columnIndex="2">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </TextField>
                <TextField GridPane.columnIndex="2" GridPane.rowIndex="1">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </TextField>
                <VBox GridPane.columnIndex="2" GridPane.rowIndex="3">
                    <children>
                        <RadioButton mnemonicParsing="false" text="Current Member">
                            <VBox.margin>
                                <Insets left="5.0" right="5.0" top="5.0" />
                            </VBox.margin>
                     <toggleGroup>
                        <ToggleGroup fx:id="membershipGroup" />
                     </toggleGroup>
                        </RadioButton>
                        <RadioButton mnemonicParsing="false" text="Single Membership" toggleGroup="$membershipGroup">
                            <VBox.margin>
                                <Insets left="5.0" right="5.0" top="5.0" />
                            </VBox.margin>
                        </RadioButton>
                        <RadioButton mnemonicParsing="false" text="Family Membership" toggleGroup="$membershipGroup">
                            <VBox.margin>
                                <Insets left="5.0" right="5.0" top="5.0" />
                            </VBox.margin>
                        </RadioButton>
                        <RadioButton mnemonicParsing="false" text="Non-member" toggleGroup="$membershipGroup">
                            <VBox.margin>
                                <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                            </VBox.margin>
                        </RadioButton>
                    </children>
                </VBox>
                <TableView prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.columnSpan="2147483647" GridPane.rowIndex="5">
                    <columns>
                        <TableColumn editable="false" maxWidth="1.7976931348623157E308" minWidth="-Infinity" prefWidth="187.0" text="Horses" />
                    </columns>
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </TableView>
                <TableView prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.columnSpan="2147483647" GridPane.rowIndex="7">
                    <columns>
                        <TableColumn prefWidth="75.0" text="Class Number" />
                        <TableColumn prefWidth="75.0" text="Class Name" />
                    </columns>
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </TableView>
                <HBox GridPane.columnIndex="1" GridPane.columnSpan="2147483647" GridPane.rowIndex="6">
                    <children>
                        <TextField HBox.hgrow="ALWAYS">
                            <HBox.margin>
                                <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                            </HBox.margin>
                        </TextField>
                        <Button mnemonicParsing="false" text="Button">
                            <HBox.margin>
                                <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                            </HBox.margin>
                        </Button>
                    </children>
                </HBox>
                <HBox alignment="CENTER" GridPane.columnIndex="1" GridPane.columnSpan="2147483647" GridPane.rowIndex="8" GridPane.valignment="CENTER">
                    <children>
                        <Button alignment="CENTER" mnemonicParsing="false" text="Button" HBox.hgrow="ALWAYS">
                            <HBox.margin>
                                <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                            </HBox.margin>
                        </Button>
                        <Button alignment="CENTER" mnemonicParsing="false" text="Button" HBox.hgrow="ALWAYS">
                            <HBox.margin>
                                <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                            </HBox.margin>
                        </Button>
                    </children>
                </HBox>
                <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.columnSpan="2147483647" GridPane.rowIndex="4">
                    <children>
                        <TextField HBox.hgrow="ALWAYS">
                            <HBox.margin>
                                <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                            </HBox.margin>
                        </TextField>
                        <Button mnemonicParsing="false" text="Add Horse">
                            <HBox.margin>
                                <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                            </HBox.margin>
                        </Button>
                    </children>
                </HBox>
                <TextField GridPane.columnIndex="2" GridPane.rowIndex="2">
                    <GridPane.margin>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                    </GridPane.margin>
                </TextField>
            </children>
        </GridPane>
    </items>
</SplitPane>

抱歉代码太长,提前感谢您的帮助!

最佳答案

我认为回答我自己的问题可能是不好的形式......但解决方案是使用 fx:define 和 fx:include 标签定义两个选项卡。然后就可以加载fxml内容了。下面的例子。

<TabPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0"
    prefWidth="800.0" tabClosingPolicy="UNAVAILABLE" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
    <fx:define>
        <fx:include fx:id="groupPaneContent" source="GroupPane.fxml" />
        <fx:include fx:id="riderPaneContent" source="RiderPane.fxml" />
    </fx:define>
    <tabs>
        <Tab closable="false" text="Classes" content="$groupPaneContent" />
        <Tab closable="false" text="Riders" content="$riderPaneContent" />
    </tabs>
</TabPane>

编辑: FXML 最初无法正确呈现。我必须手动调整应用程序的大小才能显示出来。如果您知道如何解决此问题,请发表评论

关于JavaFX 主 fxml 未加载 fxml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24357092/

相关文章:

带有向上/向下箭头的 JavaFX 组合框

javafx : PieChart incorrect data handles MouseEvent

java - 如何从超类中选择 child ?

java - 如何为范围内缺失的日期创建行?

JavaFX TreeView setRoot 导致异常

java - 监听ListView中ScrollBar的变化

java - Jsp加载大量数据到内存?

Java substring.equals 与 ==

java - 如何按顺序执行javaFX任务、服务

java - 为 Javafx 程序分配更多 VRAM