2017-11-01 18 views
1

私はJavaFXを使い慣れていないので、メニューバーを持たないアンカーパネルを2つ切り替える必要がありますが、アンカーパネル自体にサインアップボタンがあります。登録フォームに切り替える必要があります。ビルダー.FXMLファイルを生成する、2つのアンカーパネルを切り替える

私の質問は簡単な方法でこれを行う方法ですか? javafx.fxml.FXMLLoaderで にjava.lang.reflect.InvocationTargetException:loginForm with signup button

enter image description here

ERRROは java.lang.RuntimeException "JavaFXのアプリケーションスレッド" スレッドで

例外で$ MethodHandler.invoke(FXMLLoader.java:1774)at javafx.fxml.FXMLLoader $ ControllerMethodEventHandler.handle(FXMLLoader.java:1657) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) でcom.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) com.sun.javafx.eventで com.sun.javafx.event.BasicEventDispatcher.dispatchEventで.EventHandlerManager.dispatchBubblingEvent com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)で(EventHandlerManager.java:191) (BasicEventDispatcher.java :58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javaf でx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) com.sun.javafx.event.BasicEventDispatcher.dispatchEventでcom.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) ( com.sun.javafx.event.EventUtil.fireEventImplでBasicEventDispatcher.java:56) でcom.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) (EventUtil.java:74) コムで.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49): javafx.event.Event.fireEvent(Event.java:198)at javafx.scene.Node.fireEvent(Node.java:8413)at javafx.scene.control.Button.fire(Button.java:185)at com.sun.javafx.scene.control.skin.BehaviorSkinBase $ 1.handleでcom.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) (BehaviorSkinBase.java:96) でcom.sun.javafx.scene.control.skin.BehaviorSkinBase $ 1.handle(BehaviorSkinBase.java:89) でcom.sun.javafx.event.CompositeEventHandler $ NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) でで com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)で(CompositeEventHandler.java:80) 0 com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) でcom.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) com.sun.javafx.eventで.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher。Javaの:58) でcom.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) で コムで com.sun.javafx.event.EventDispatchChainImplで.sun.javafx.event.EventDispatchChainImpl.dispatchEvent com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)で(EventDispatchChainImpl.java:114) .dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)atjavafx.scene.Scene $ MouseHandler.process $(Scene.java:3757)at javafx.scene.Scene $ MouseHandler.access $ 1500(Scene.java:3987): でjavafx.event.Event.fireEvent(Event.java:198) 3485)at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)at javafx.scene.Scene $ ScenePeerListener.mouseEvent(Scene.java:2494)at com.sun.javafx.tk.quantum.GlassViewEventHandler $ でjava.security.AccessController.doPrivileged(ネイティブメソッド)で com.sun.javafx.tk.quantum.GlassViewEventHandler $ MouseEventNotification.run(GlassViewEventHandler.java:294) でMouseEventNotification.run(GlassViewEventHandler.java:380) com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda $ handleMouseEvent $ 354(GlassViewEventHandler.jav A:416) でcom.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415)で com.sun.glass.ui.View.handleMouseEvent(View.java:555) com.sun.glass.ui.View.notifyMouse(View.java:937) com.sun.glass.ui。 win.WinApplication._runLoop(ネイティブメソッド)at com.sun.glass.ui.win.WinApplication.lambda $ null $ 148(WinApplication.java:191) at java.lang.Thread.run(Unknown Source)原因: java.lang.reflect.InvocationTargetExceptionが にあります。sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)at su n.reflect.NativeMethodAccessorImpl.invoke(不明なソース) sun.reflect.DelegatingMethodAccessorImpl.invoke(不明なソース) でjava.lang.reflect.Method.invoke(不明なソース) sun.reflect.misc.Trampoline.invoke sun.reflectで java.lang.reflect.Method.invoke(不明なソース)で sun.reflect.DelegatingMethodAccessorImpl.invoke(不明なソース)で sun.reflect.GeneratedMethodAccessor1.invoke(不明なソース)で(不明なソース) .mxml.FXMLLoader $ MethodHandler.invoke(FXMLLoader.java:1771)... 48より原因:java.lang.IllegalStateException:場所が に設定されていません。 javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2434)の javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) localmart.view.AuthController.Register(AuthController.java:22)... 58 より

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); 
    } 
} 

コントローラ。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(); 
    } 
} 
} 

私は、コントローラ、onaction、FX設定方法main.javaで、クリックのサインアップボタンをフォームを登録ロードへのI registerform

を切り替える必要があり、私の質問:

をlogin.fxmlにIDを
+0

fxmlファイルを共有し、切り替えてどういう意味ですか?サインアップのアンカーパネルを非表示にしてregisterformを表示しますか?または両方を見えるようにしますか? –

+0

私は2つのfxmlファイルを設計しました。一つはログインフォームと他の登録フォーム用です...ログインフォームステージ(ウィンドウ)にあるサインアップボタンをクリックすると、登録フォームウィンドウが開きます –

+0

実際に別のfxmlファイルを同じ場面、そう? 現在、シーン内で同じfxmlをロードするボタンアクションで、同じメソッド 'showSignUp()'を呼び出しています。だからもし私が言ったことを試しているのであれば、最初にログインfxmlをロードし、ボタンアクション –

答えて

1

AnchorPanelogin.fxmlで、これは親となり、他のすべての要素のコンテナになります。idAnchorpaneとなります(自分で選択することができます)。それをやった後、あなたはちょうどあなたがロードしたいfxmlご希望により、reg.fxmlを交換し、あなたのコントローラクラス

@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(); 
    } 
} 

にこれらのコードセクションを追加する必要があります。

+0

私は質問をトップに更新しました。私は正確に何を変更した後にエラーが発生しました –

+0

私の質問に上記のフォルダ構造を入れました –

+0

サインアップボタンの後にクラッシュする押す??そして、同じパッケージ内のコントローラクラスとfxmlとして、あなたは 'FXMLLoader fxmlLoader = new FXMLLoader(getClass()。getResource(" Register.fxml "));' –

関連する問題