2012-12-06 59 views
5

我在使用JavaFX Scene Builder構建JavaFX應用程序。該界面是在Scene Builder中創建的,並創建了一個FXML文件(main.fxml)。如何使用FXMLLoader.load() - JavaFX 2

要在我的應用程序中使用接口,我必須使用FXMLLoader加載FXML文件,但存在問題,因爲load()方法返回一個Object,並且構建場景我需要一個Parent類的實例。

下面是我的一個MainClass。編譯器給出錯誤,因爲頁面不屬於父類型:

Object page = FXMLLoader.load(MainWindowController.class.getResource("main.fxml")); 
Scene scene = new Scene(page); 
primaryStage.setScene(scene); 
primaryStage.show(); 

我該如何使這個編譯和運行正確?

這裏是FXML文件(main.fxml):

<?xml version="1.0" encoding="UTF-8"?> 
<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.paint.*?> 

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml"> 
    <children> 
    <VBox prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
     <children> 
     <MenuBar minHeight="21.0" prefHeight="21.0" prefWidth="600.0"> 
      <menus> 
      <Menu mnemonicParsing="false" text="File"> 
       <items> 
       <MenuItem mnemonicParsing="false" text="Close" /> 
       </items> 
      </Menu> 
      <Menu mnemonicParsing="false" text="Edit"> 
       <items> 
       <MenuItem mnemonicParsing="false" text="Delete" /> 
       </items> 
      </Menu> 
      <Menu mnemonicParsing="false" text="Help"> 
       <items> 
       <MenuItem mnemonicParsing="false" text="About" /> 
       </items> 
      </Menu> 
      </menus> 
     </MenuBar> 
     <ToolBar minHeight="24.0"> 
      <items> 
      <Button fx:id="btFormat" mnemonicParsing="false" text="FORMAT" /> 
      <Button fx:id="btUnformat" mnemonicParsing="false" text="Unformat" /> 
      <Button fx:id="btAutoIndent" mnemonicParsing="false" text="Auto-indent" /> 
      <CheckBox fx:id="cbShowLineNumber" mnemonicParsing="false" text="Show line number" /> 
      </items> 
     </ToolBar> 
     <SplitPane dividerPositions="0.5" focusTraversable="true" orientation="VERTICAL" prefHeight="348.0" prefWidth="600.0"> 
      <items> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0"> 
       <children> 
       <VBox prefHeight="170.0" prefWidth="598.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
        <children> 
        <Label text="INPUT - Paste your code here" /> 
        <TextArea fx:id="taInput" prefWidth="200.0" wrapText="true" /> 
        </children> 
       </VBox> 
       </children> 
      </AnchorPane> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0"> 
       <children> 
       <VBox prefHeight="170.0" prefWidth="598.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
        <children> 
        <Label text="OUTPUT - The formatted code" /> 
        <TextArea fx:id="taOutput" prefWidth="200.0" wrapText="true" /> 
        </children> 
       </VBox> 
       </children> 
      </AnchorPane> 
      </items> 
     </SplitPane> 
     </children> 
    </VBox> 
    </children> 
</AnchorPane> 
+0

請在你的問題你'FXML'來源。 – jewelsea

+0

增加了FXML文件。 – ceklock

回答

8

由於各種資格通過你需要的狀態FXML加載實體的預期鍵入自己。

Parent page = FXMLLoader.<Parent>load(MainWindowController.class.getResource("main.fxml").toExternalForm()); 
+0

感謝您的回答,它比我想象的更簡單。基於你的答案,我做到了這一點,它也可以工作: 父頁=(父)FXMLLoader.load( MainWindowController.class.getResource(「main.fxml」)); – ceklock

+4

對於Java> = 7,轉換不是必需的。只需使用:FXMLLoader.load(...)。類型推斷將完成剩下的工作。 – miho

5

試試這個

Parent root= FXMLLoader.load(getClass().getResource("mention the path to your fxml file"); 

希望這將有助於