首页 文章

JavaFX主fxml没有加载fxml

提问于
浏览
0

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

EDIT: 经过更多的试验,我've narrowed it down to the split pane. I tried a very simple fxml with a button, which was fine, but add a split pane and two buttons, and the view doesn' t渲染 .

这是我的主要类:public class Main extends Application {

@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>

这是第一个窗格

<?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>

对于长代码感到抱歉,并提前感谢您的帮助!

1 回答

  • 0

    我认为回答我自己的问题可能是糟糕的形式......但解决方案是使用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>
    

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

相关问题