2017-11-01 6 views
1

Ich bin neu in JavaFX und muss zwischen zwei Anchor Panes umschalten, die keine Menüleiste haben, aber den Anmelde-Button in der Anchorpane selbst, sollte ich auf Anmeldeformular Formular-Login-Formular umschalten Builder zum Generieren der .FXML-Dateien,Wechsel zwischen zwei Anchor-Bereichen

Meine Frage ist, wie man das auf einfache Weise macht? loginForm with signup button

enter image description here

ERRRO IS

Exception in thread "JavaFX Anwendung Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException bei javafx.fxml.FXMLLoader $ MethodHandler.invoke (FXMLLoader.java:1774) um javafx.fxml.FXMLLoader $ ControllerMethodEventHandler.handle (FXMLLoader.java:1657) um com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent (CompositeEventHandler.java:86) bei com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:238) bei com.sun.javafx.event .EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:191) bei com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent (CompositeEventDispatcher.java:59) bei com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java : 58) um com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) um com.sun.javaf x.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56) bei com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) bei com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56) bei com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) bei com.sun.javafx.event.EventUtil.fireEventImpl (EventUtil.java:74) bei com .sun.javafx.event.EventUtil.fireEvent (EventUtil.java:49) um javafx.event.Event.fireEvent (Event.java:198) um ​​ javafx.scene.Node.fireEvent (Node.java:8413) um javafx.scene.control.Button.fire (Button.java:185) unter com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased (ButtonBehavior.java:182) bei com.sun.javafx.scene.control.skin.BehaviorSkinBase $ 1.handle (BehaviorSkinBase.java:96) bei com.sun.javafx.scene.control.skin.BehaviorSkinBase $ 1.handle (BehaviorSkinBase.java:89) bei com.sun.javafx.event.CompositeEventHandler $ NormalEventHandlerRecord.handleBubblingEvent (CompositeEventHandler.java:218) bei com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent (CompositeEventHandler.java:80) bei com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:238) bei com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:191) bei com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent (CompositeEventDispatcher.java:59) bei com.sun.javafx.event .BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.Java: 58) bei com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) bei com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56) bei com .sun.javafx.event.EventDispatchChainImpl.dispatchEvent (EventDispatchChainImpl.java:114) bei com.sun.javafx.event.BasicEventDispatcher.dispatchEvent (BasicEventDispatcher.java:56) bei com.sun.javafx.event.EventDispatchChainImpl .dispatchEvent (EventDispatchChainImpl.java:114) bei com.sun.javafx.event.EventUtil.fireEventImpl (EventUtil.java:74) bei com.sun.javafx.event.EventUtil.fireEvent (EventUtil.java:54) um javafx.event.Event.fireEvent (Event.java:198) um ​​ javafx.scene.Scene $ MouseHandler.process (Scene.java:3757) um javafx.scene.Scene $ MouseHandler.access $ 1500 (Scene.java: 3485) um javafx.scene.Scene.impl_processMouseEvent (Scene.java:1762) um javafx.scene.Scene $ ScenePeerListener.mouseEvent (Scene.java:2494) um com.sun.javafx.tk.quantum.GlassViewEventHandler $ MouseEventNotification.run (GlassViewEventHandler.java:380) bei com.sun.javafx.tk.quantum.GlassViewEventHandler $ MouseEventNotification.run (GlassViewEventHandler.java:294) bei java.security.AccessController.doPrivileged (native Methode) bei com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda $ handleMouseEvent $ 354 (GlassViewEventHandler.jav a: 416) bei com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock (QuantumToolkit.java:389) bei com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent (GlassViewEventHandler.java:415) bei com.sun.glass.ui.View.handleMouseEvent (View.java:555) um com.sun.glass.ui.View.notifyMouse (View.java:937) um com.sun.glass.ui. win.WinApplication._runLoop (Native Methode) um com.sun.glass.ui.win.WinApplication.lambda $ null $ 148 (WinApplication.java:191) bei java.lang.Thread.run (unbekannte Quelle) verursacht durch: java.lang.reflect.InvocationTargetException bei sun.reflect.NativeMethodAccessorImpl.invoke0 (native Methode) bei su n.reflect.NativeMethodAccessorImpl.invoke (Unbekannte Quelle) um sun.reflect.DelegatingMethodAccessorImpl.invoke (Unbekannte Quelle) um java.lang.reflect.Method.invoke (Unbekannte Quelle) um sun.reflect.misc.Trampoline.invoke (Unknown Source) bei sun.reflect.GeneratedMethodAccessor1.invoke (Unknown Source) bei sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) bei java.lang.reflect.Method.invoke (Unknown Source) bei sun.reflect .misc.MethodUtil.invoke (Unbekannte Quelle) um javafx.fxml.FXMLLoader $ MethodHandler.invoke (FXMLLoader.java:1771) ... 48 mehr verursacht durch: java.lang.IllegalStateException: Location ist nicht festgelegt. bei javafx.fxml.FXMLLoader.loadImpl (FXMLLoader.java:2434) unter javafx.fxml.FXMLLoader.load (FXMLLoader.java:2409) um localmart.view.AuthController.Register (AuthController.java:22) ... 58 mehr

Main.java

package localmart.view; 
import java.io.IOException; 

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

public class Main extends Application { 
    private Stage primaryStage; 
    private AnchorPane mainLayout; 

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

    } 

    private void showMainView() { 
     FXMLLoader loader = new FXMLLoader(); 
     loader.setLocation(Main.class.getResource("view/login.fxml")); // login 
                     // form 
     try { 
      mainLayout = loader.load(); 
      Scene scene = new Scene(mainLayout); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

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

Controller.java

package localmart.view; 

    import java.io.IOException; 

import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.layout.Pane; 

public class AuthController { 
    @FXML AnchorPane anchorPane; 

@FXML 
private void RegisterStage() throws IOException { 
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("reg.fxml")); 
    Pane registerPane = (Pane) fxmlLoader.load(); 
    try { 
     anchorPane.getChildren().clear(); 
     anchorPane.getChildren().add(registerPane); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

meine Frage, wie Form in main.java laden registrieren und auf Klick Anmeldungen Taste i registerform

i-Set Controller, OnAction, fx wechseln müssen: ID login.fxml

+0

Teilen Sie Ihre fxml-Datei und was meinst du mit wechseln? Verstecke den Anmeldepaneel und zeige die Registrierungsform ??? Oder beide sichtbar halten? –

+0

ich entwarf zwei fxml datei eine ist für login form und andere register form ... wenn ich klick auf die schaltfläche die in login form stage (window) sollte es öffnen register form window –

+0

Also eigentlich willst du eine andere fxml file in laden die gleiche Szene, oder? Momentan rufen Sie die selbe Methode 'showSignUp()' in der Button-Aktion auf, die das gleiche fxml in die Szene lädt. Also, wenn Sie versuchen, was ich gesagt habe, zuerst laden Sie die Login-fxml und laden Sie das Register-Formular in der Schaltfläche Aktion –

Antwort

1

Sie sollten eine AnchorPane in login.fxml haben, die die Eltern sein wird und der Container aller anderen Elemente sein wird und ich setze anchorPane als die id von dieser Anchorpane (Sie können Ihre wählen). Nachdem ich es, Sie müssen nur diese Code-Abschnitt in Ihrem Controller-Klasse

@FXML AnchorPane anchorPane; 

@FXML 
private void RegisterStage() throws IOException { 
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("reg.fxml")); 
    Pane registerPane = (Pane) fxmlLoader.load(); 
    try { 
     anchorPane.getChildren().clear(); 
     anchorPane.getChildren().add(registerPane); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Ersetzen Sie die reg.fxml von Ihnen gewünschten hinzuzufügen fxml Sie laden möchten.

+0

Ich aktualisierte meine Frage top .. Ich habe Fehler nach der Änderung, was Sie genau gesagt –

+0

Ich setze Ordnerstruktur oben in meiner Frage –

+0

Es stürzt auf den Start oder stürzt nach Anmeldung Schaltfläche ab Drücken Sie?? Und als Controller-Klasse und fxml im selben Paket sollten Sie 'FXMLLoader fxmlLoader = neuer FXMLLoader (getClass(). GetResource (" Register.fxml "));' –

Verwandte Themen