2012-12-06 7 views
5

Ich baue eine JavaFX Anwendung mit der JavaFX Scene Builder. Die Benutzeroberfläche wurde im Szenen-Generator erstellt und eine FXML-Datei (main.fxml) wurde erstellt.Wie benutze ich FXMLLoader.load() - JavaFX 2

Um die Schnittstelle in meiner Anwendung zu verwenden, muss ich die FXML-Datei mit der FXMLLoader laden, aber es gibt ein Problem, weil die load() -Methode ein Objekt zurückgibt, und um eine Szene zu erstellen, brauche ich eine Instanz der übergeordneten Klasse.

Unten ist ein Stück meiner MainClass. Der Compiler gibt einen Fehler, da Seite nicht vom Typ Elternteil ist:

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

Was kann ich tun, um dieses Kompilierung zu machen und richtig laufen? Hier

ist die FXML Datei (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

Geben Sie bitte helfen würde. – jewelsea

+0

Hinzugefügt FXML-Datei. – ceklock

Antwort

8

Aufgrund Vielzahl von Einheiten qualifizierten durch FXML geladen werden Sie in den Zustand brauchen erwartet selbst eingeben.

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

Danke für deine Antwort, es ist einfacher als ich dachte. Basierend auf Ihrer Antwort habe ich es so gemacht und es funktioniert auch: Parent page = (Eltern) FXMLLoader.load ( MainWindowController.class.getResource ("main.fxml")); – ceklock

+4

Für Java> = 7 ist die Besetzung nicht notwendig. Verwenden Sie einfach: FXMLLoader.load (...). Tippfehler machen den Rest. – miho

5

Versuchen Sie, diese

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

Hoffnung, dass diese in Ihrer Frage Ihre `FXML` Quelle