2017-08-13 13 views
1

私はJavaFxで新しく、IntellijとSceneBuilderを使用しています。IntellijでScenebuilderを使ってFXMLを生成する

Screenshot

PersonOverviewとRootLayoutはSceneBuilderで生成されます。私は、MVCモデルを作成しました。

PersonOverview:

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

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.ButtonBar?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.control.SplitPane?> 
<?import javafx.scene.control.TableColumn?> 
<?import javafx.scene.control.TableView?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.layout.ColumnConstraints?> 
<?import javafx.scene.layout.GridPane?> 
<?import javafx.scene.layout.RowConstraints?> 


<AnchorPane prefHeight="300.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="PersonOverview"> 
    <children> 
     <SplitPane dividerPositions="0.44481605351170567" prefHeight="300.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
     <items> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0"> 
       <children> 
        <TableView layoutX="8.0" layoutY="14.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
        <columns> 
         <TableColumn prefWidth="123.0" text="First Name" /> 
         <TableColumn prefWidth="138.0" text="Last Name" /> 
        </columns> 
        <columnResizePolicy> 
         <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> 
        </columnResizePolicy> 
        </TableView> 
       </children> 
      </AnchorPane> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0"> 
       <children> 
        <Label layoutX="8.0" layoutY="6.0" text="Person details:" AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="5.0" /> 
        <GridPane layoutX="71.0" layoutY="59.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="30.0"> 
        <columnConstraints> 
         <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
         <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
        </columnConstraints> 
        <rowConstraints> 
         <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
         <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
         <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
         <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
         <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
         <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
        </rowConstraints> 
        <children> 
         <Label text="First Name:" /> 
         <Label text="Last Name:" GridPane.rowIndex="1" /> 
         <Label text="Street:" GridPane.rowIndex="2" /> 
         <Label text="City:" GridPane.rowIndex="3" /> 
         <Label text="Postal code:" GridPane.rowIndex="4" /> 
         <Label text="Birthday:" GridPane.rowIndex="5" /> 
         <Label text="Label" GridPane.columnIndex="1" /> 
         <Label text="Label" GridPane.columnIndex="1" GridPane.rowIndex="1" /> 
         <Label text="Label" GridPane.columnIndex="1" GridPane.rowIndex="2" /> 
         <Label text="Label" GridPane.columnIndex="1" GridPane.rowIndex="3" /> 
         <Label text="Label" GridPane.columnIndex="1" GridPane.rowIndex="4" /> 
         <Label text="Label" GridPane.columnIndex="1" GridPane.rowIndex="5" /> 
        </children> 
        </GridPane> 
        <ButtonBar layoutX="18.0" layoutY="248.0" prefHeight="40.0" prefWidth="299.0"> 
        <buttons> 
         <Button mnemonicParsing="false" text="New.." /> 
         <Button mnemonicParsing="false" text="Edit.." /> 
         <Button mnemonicParsing="false" text="Delete" /> 
        </buttons> 
        </ButtonBar> 
       </children> 
      </AnchorPane> 
     </items> 
     </SplitPane> 
    </children> 
</AnchorPane> 

RootLayout:

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

<?import javafx.scene.control.Menu?> 
<?import javafx.scene.control.MenuBar?> 
<?import javafx.scene.control.MenuItem?> 
<?import javafx.scene.layout.BorderPane?> 


<BorderPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="RootLayout"> 
    <top> 
     <MenuBar BorderPane.alignment="CENTER"> 
     <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> 
    </top> 
</BorderPane> 

MainAppに:

package com.fxproject.address; 

import java.io.IOException; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Scene; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 

public class MainApp extends Application { 

    private Stage primaryStage; 
    private BorderPane rootLayout; 

    @Override 
    public void start(Stage primaryStage) { 
     this.primaryStage = primaryStage; 
     this.primaryStage.setTitle("AddressApp"); 

     initRootLayout(); 

     showPersonOverview(); 
    } 

    /** 
    * Initializes the root layout. 
    */ 
    public void initRootLayout() { 
     try { 
      // Load root layout from fxml file. 
      FXMLLoader loader = new FXMLLoader(); 
      loader.setLocation(MainApp.class.getResource("view/RootLayout.fxml")); 
      rootLayout = (BorderPane) loader.load(); 

      // Show the scene containing the root layout. 
      Scene scene = new Scene(rootLayout); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * Shows the person overview inside the root layout. 
    */ 
    public void showPersonOverview() { 
     try { 
      // Load person overview. 
      FXMLLoader loader = new FXMLLoader(); 
      loader.setLocation(MainApp.class.getResource("view/PersonOverview.fxml")); 
      AnchorPane personOverview = (AnchorPane) loader.load(); 

      // Set person overview into the center of root layout. 
      rootLayout.setCenter(personOverview); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * Returns the main stage. 
    * @return 
    */ 
    public Stage getPrimaryStage() { 
     return primaryStage; 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

私はこのプログラムを実行しようとするまで、すべてが正常に見えます。そして、あなたは、コントローラfx:controller="RootLayout"を設定し、それが

存在していないので、あなたがcontrollerフォルダにRootLayoutControllerクラスを作成し、クラスがInitializable

を実装することができますことを

javafx.fxml.LoadException: /home/ahmed/IdeaProjects/fxproject01/out/production/fxproject01/com/fxproject/address/view/RootLayout.fxml:9 
    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601) 
    at javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:103) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:922) 
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) 
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) 
    at com.fxproject.address.MainApp.initRootLayout(MainApp.java:35) 
    at com.fxproject.address.MainApp.start(MainApp.java:22) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) 
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: java.lang.ClassNotFoundException: RootLayout 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:920) 
    ... 18 more 
javafx.fxml.LoadException: /home/ahmed/IdeaProjects/fxproject01/out/production/fxproject01/com/fxproject/address/view/PersonOverview.fxml:15 
    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601) 
    at javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:103) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:922) 
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) 
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) 
    at com.fxproject.address.MainApp.showPersonOverview(MainApp.java:54) 
    at com.fxproject.address.MainApp.start(MainApp.java:24) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) 
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: java.lang.ClassNotFoundException: PersonOverview 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:920) 
    ... 18 more 

答えて

0

と:それは私にエラーのリストを提供します変更fx:controller

fx:controller="com.fxproject.address.controller.RootLayoutController" 
+0

このクラスにはどのようなものを貼りますか?エラー:(5,8)java:com.fxproject.address.RootLayoutControllerは抽象メソッドではなく、抽象メソッドinitialize(java.net.URL、java.util.ResourceBundle)をオーバーライドしません。 javafx.fxml.Initializable – zerocoldTUN

+0

あなたのコントローラです。あなたのビューを制御するコードを記述します。 もちろん、 'initialize'メソッドを実装してください。 – Ali

+1

@zerocoldTUNコントローラクラスに' Initializable'インターフェースを追加する必要はありませんが、追加する場合はデフォルト以外のすべてのメソッドをインターフェースから実装する必要がありますこの場合、@Override public void initialize(URL url、ResourceBundle bundle){} '。 BTW: 'fx:controller'属性の値は、コントローラクラスの完全修飾クラス名です。この属性はオプションですが、指定されている場合は、この正確な名前を持つクラスが必要です(クラスが存在するパッケージに関係なく、このパラメータで 'Class.forName'が呼び出されます)。 – fabian

関連する問題