3

サブフォルダーから fxml を読み込もうとしていますが、失敗します。シーンのコンテンツを置き換える行があります。

private Parent replaceSceneContent(String fxml) throws Exception {
        Parent page = (Parent) FXMLLoader.load(App.class.getResource("skinFolder/fxml/"+fxml), null, new JavaFXBuilderFactory());
        Scene scene = stage.getScene();
        if (scene == null) {
            scene = new Scene(page, 700, 450);
            scene.getStylesheets().add(App.class.getResource("skinFolder/css/defaultSkin.css").toExternalForm());
            stage.setScene(scene);
        } else {
            stage.getScene().setRoot(page);
        }
        stage.sizeToScene();
        return page;
    }

この関数を次のメソッドで使用します。

private void gotoLogin() {
        try {
            replaceSceneContent("login.fxml");
        } catch (Exception ex) {
            Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

問題は、次のエラーが発生したことです。

javafx.fxml.LoadException: Method processLogin() does not have the correct signature for an event handler.
    at javafx.fxml.FXMLLoader$Element.processEventHandlerAttributes(Unknown Source)
    at javafx.fxml.FXMLLoader$ValueElement.processEndElement(Unknown Source)
    at javafx.fxml.FXMLLoader.processEndElement(Unknown Source)
    at javafx.fxml.FXMLLoader.load(Unknown Source)
    at javafx.fxml.FXMLLoader.load(Unknown Source)
    at Main.App.replaceSceneContent(App.java:115)
    at Main.App.gotoLogin(App.java:108)
    at Main.App.start(App.java:72)
    at com.sun.javafx.application.LauncherImpl$5.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$4.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$3.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$2$1.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:722)

誰でも何を修正する必要があるのか​​ 知っているので、これをシーンのコンテンツに置き換えて機能させることができますか?

ありがとう

4

1 に答える 1

7

Button次のように FXML ファイルでのアクションを定義している場合:

 <Button text="Login" onAction="#processLogin"/>

次に、次のようにコントローラー クラスでメソッドを定義する必要があります。の署名に注意してくださいprocessLogin:

    @FXML
    private void processLogin(javafx.event.ActionEvent event) {
        // Process Login
    }
于 2012-05-02T11:07:40.267 に答える