Scene Builder 8.0和Intelli。从一个场景到另一个场景

DMT82

如何在Scene Builder中使用按钮/菜单项将两个场景相互连接?

我已经完成了一个新的测试项目,并尝试了Hips向我展示的内容,但是出现了一些错误。并不是臀部确实做了什么,这就是为什么我得到错误而不是他的原因:-)

主班。

package sample;

public class Main extends Application {

Stage window;
Scene mainScene, eventScene;
BorderPane mainLayout;
StackPane eventLayout;

@Override
public void start(Stage primaryStage) throws Exception {
    window = primaryStage;

    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(Main.class.getResource("main.fxml"));
    mainLayout = loader.load();
    MainController mainController = loader.getController();

    loader = new FXMLLoader();
    loader.setLocation(Main.class.getResource("event.fxml"));
    eventLayout = loader.load();
    EventController eventController = loader.getController();

    mainScene = new Scene(mainLayout);
    eventScene = new Scene(eventLayout);


    window.setScene(mainScene);
    window.setTitle("Test Project");
    window.show();

}

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

public void setScene(Scene scene) {
    window.setScene(scene);
}
}

MainController。

package sample;


public class MainController {

private Scene eventScene;
private Main main;

public void setMain(Main main){
    this.main = main;
}
public void seteventScene(Scene eventScene) {
    this.eventScene = eventScene;
}

@FXML
public void switchScene() {
    main.setScene(eventScene);

}
}

main.FXML

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

<BorderPane fx:id="mainLayout" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="550.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.MainController">
<top>
  <VBox fx:id="vbox" BorderPane.alignment="CENTER">
     <children>
        <MenuBar fx:id="menuBar">
          <menus>
            <Menu fx:id="fileMenu" mnemonicParsing="false" text="File">
              <items>
                <MenuItem fx:id="newItem" mnemonicParsing="false" onAction="#switchScene" text="New..." />
                    <MenuItem fx:id="openItem" mnemonicParsing="false" text="Open..." />
                    <MenuItem fx:id="saveItem" mnemonicParsing="false" text="Save..." />
                    <SeparatorMenuItem mnemonicParsing="false" />
                    <MenuItem fx:id="exitItem" mnemonicParsing="false" text="Exit" />
              </items>
            </Menu>
            <Menu fx:id="editMenu" mnemonicParsing="false" text="Edit">
              <items>
                <MenuItem mnemonicParsing="false" text="Delete" />
              </items>
            </Menu>
            <Menu fx:id="helpMenu" mnemonicParsing="false" text="Help">
              <items>
                <MenuItem mnemonicParsing="false" text="About" />
              </items>
            </Menu>
          </menus>
        </MenuBar>
     </children>
  </VBox>
</top>
</BorderPane>

EventController。

package sample;


public class EventController {

private Scene mainScene;
private Main main;

public void setMain(Main main) {
    this.main = main;
}

public void setmainScene(Scene mainScene) {
    this.mainScene = mainScene;

}

@FXML
public void goBack() {
    main.setScene(mainScene);

}
}

event.FXML。

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


<StackPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="550.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.EventController" />

当我单击“新建...”菜单项时,这是我收到的错误。

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.control.MenuItem.fire(MenuItem.java:462)
at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405)
at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$343(ContextMenuContent.java:1358)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java: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$MouseEventNotification.run(GlassViewEventHandler.java:352)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$355(GlassViewEventHandler.java:388)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:387)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at    com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.    java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.    java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771)
... 43 more
Caused by: java.lang.NullPointerException
at sample.MainController.switchScene(MainController.java:21)
... 53 more
臀部

如果您有任何与IntelliJ相关的特定问题,我将把这作为实现IntelliJ这样的最小方法的一个示例。

脚步:

  • 创建一个新的Java项目
  • 创建两个控制器文件
  • 创建两个空文件,并将它们命名为scene1.fxml和scene2.fxml
  • 使用SceneBuilder使用某些元素填充两个.fxml文件,并将引用传递给它们各自的Controller。(在我的情况下,两个场景仅由一个窗格和一个Button组成,该onAction方法用于切换场景。
  • 使用以下代码:

Main.java

package sample;

import javafx.application.*;
import javafx.fxml.FXMLLoader;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;

import java.io.IOException;

public class Main extends Application {

    // Primary Stage
    Stage window;
    // Two scenes
    Scene scene1, scene2;
    // The panes are associated with the respective .fxml files
    private Pane pane1;
    private Pane pane2;

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

    @Override
    public void start(Stage primaryStage) {
        try {
            // Set the window as primary stage
            window = primaryStage;

            // Load the fxml files and their controllers
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(Main.class.getResource("scene1.fxml"));
            pane1 = loader.load();
            Scene1Controller controller1 = loader.getController();

            loader = new FXMLLoader();
            loader.setLocation(Main.class.getResource("scene2.fxml"));
            pane2 = loader.load();
            Scene2Controller controller2 = loader.getController();

            // The scenes are based on what has been loaded from the .fxml files
            Scene scene1 = new Scene(pane1);
            Scene scene2 = new Scene(pane2);

            // Pass reference the each scenes controller
            controller1.setScene2(scene2);
            controller1.setMain(this);
            controller2.setScene1(scene1);
            controller2.setMain(this);

            //Display scene 1 at first
            window.setScene(scene1);
            window.setTitle("Scene!");
            window.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // used by the controllers to switch the scenes
    public void setScene(Scene scene){
        window.setScene(scene);
    }
}

Scene1Controller.java

package sample;

import javafx.scene.Scene;
import javafx.stage.Window;

public class Scene1Controller {

    private Scene scene2;
    private Main main;

    public void setMain(Main main){
        this.main = main;
    }
    public void setScene2(Scene scene2){
        this.scene2 = scene2;
    }
    // this method is called by clicking the button
    @FXML
    public void switchScene(){main.setScene(scene2);}
}

Scene2Controller.java

package sample;

import javafx.scene.Scene;
import javafx.stage.Window;

public class Scene2Controller {

    private Scene scene1;
    private Main main;

    public void setMain(Main main){this.main = main;}
    public void setScene1(Scene scene1){this.scene1 = scene1;}
    // this method is called by clicking the button
    @FXML
    public void goBack(){main.setScene(scene1);}
}

scene1.fxml

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

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Scene1Controller">
   <children>
      <Button layoutX="274.0" layoutY="188.0" mnemonicParsing="false" onAction="#switchScene" text="Go to scene 2!" />
   </children>
</Pane>

scene2.fxml

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

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Scene2Controller">
   <children>
      <Button layoutX="194.0" layoutY="175.0" mnemonicParsing="false" onAction="#goBack" text="Go back!" />
   </children>
</Pane>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Eclipse和Scene Builder在Javafx 8中将数据从一个选项卡发送到另一个选项卡

来自分类Dev

什么是JavaFX,FXML和Scene Builder?

来自分类Dev

JavaFX + Scene Builder如何切换场景

来自分类Dev

将INT值从一个场景传递到另一个场景

来自分类Dev

MigPane与FXML和Scene Builder的兼容性

来自分类Dev

Scene Builder 2.0无法启动

来自分类Dev

将几何图形从一个场景复制到另一个场景

来自分类Dev

Java:如何从Gui Builder的另一个组件(从JLabel到JLabel)上添加一个组件?

来自分类Dev

一个位于另一个顶部的Imagebutton无法单击另一个之下的一个-Scene2d LIBGDX

来自分类Dev

我可以仅将Angular 8功能模块从一个Angular应用程序/工作区复制到另一个吗?

来自分类Dev

从一个房间到另一个房间打补丁(8)RJ45端口的最佳方法

来自分类Dev

使用JavaFX Scene Builder 2.0同时显示两个窗口

来自分类Dev

使用JavaFx Scene Builder 2.0同时“全屏”显示两个窗口

来自分类Dev

如何将 Scene Builder 中创建的场景加载到 JavaFX 应用程序主类中?

来自分类Dev

如何设置要导入到Scene Builder中的JavaFX控件?

来自分类Dev

如何设置要导入到Scene Builder中的JavaFX控件?

来自分类Dev

是否可以在 ROKU 中从一个文件到另一个文件进行场景访问?

来自分类常见问题

如何在CSS中为JavaFX Scene Builder节点和类样式化JFoenix?

来自分类Dev

Scene Builder和应用程序中不同的锚定结果

来自分类Dev

如何使用Eclipse和Scene Builder在Java中更改标签文本?

来自分类Dev

在Scene Builder中包含Controls FX吗?

来自分类Dev

JavaFX Scene Builder-如何访问组件

来自分类Dev

通过Scene Builder组合框项目?

来自分类Dev

Scene Builder:如何隐藏面板等上的边框

来自分类Dev

JavaFX Scene Builder控制器

来自分类Dev

JavaFX Scene Builder定制选项卡

来自分类Dev

Scene Builder无法打开FXML文件

来自分类Dev

如何使用Scenic将消息从一个场景发送到另一个场景?

来自分类Dev

iOS故事板:5秒后自动从一个场景过渡到另一个场景

Related 相关文章

  1. 1

    使用Eclipse和Scene Builder在Javafx 8中将数据从一个选项卡发送到另一个选项卡

  2. 2

    什么是JavaFX,FXML和Scene Builder?

  3. 3

    JavaFX + Scene Builder如何切换场景

  4. 4

    将INT值从一个场景传递到另一个场景

  5. 5

    MigPane与FXML和Scene Builder的兼容性

  6. 6

    Scene Builder 2.0无法启动

  7. 7

    将几何图形从一个场景复制到另一个场景

  8. 8

    Java:如何从Gui Builder的另一个组件(从JLabel到JLabel)上添加一个组件?

  9. 9

    一个位于另一个顶部的Imagebutton无法单击另一个之下的一个-Scene2d LIBGDX

  10. 10

    我可以仅将Angular 8功能模块从一个Angular应用程序/工作区复制到另一个吗?

  11. 11

    从一个房间到另一个房间打补丁(8)RJ45端口的最佳方法

  12. 12

    使用JavaFX Scene Builder 2.0同时显示两个窗口

  13. 13

    使用JavaFx Scene Builder 2.0同时“全屏”显示两个窗口

  14. 14

    如何将 Scene Builder 中创建的场景加载到 JavaFX 应用程序主类中?

  15. 15

    如何设置要导入到Scene Builder中的JavaFX控件?

  16. 16

    如何设置要导入到Scene Builder中的JavaFX控件?

  17. 17

    是否可以在 ROKU 中从一个文件到另一个文件进行场景访问?

  18. 18

    如何在CSS中为JavaFX Scene Builder节点和类样式化JFoenix?

  19. 19

    Scene Builder和应用程序中不同的锚定结果

  20. 20

    如何使用Eclipse和Scene Builder在Java中更改标签文本?

  21. 21

    在Scene Builder中包含Controls FX吗?

  22. 22

    JavaFX Scene Builder-如何访问组件

  23. 23

    通过Scene Builder组合框项目?

  24. 24

    Scene Builder:如何隐藏面板等上的边框

  25. 25

    JavaFX Scene Builder控制器

  26. 26

    JavaFX Scene Builder定制选项卡

  27. 27

    Scene Builder无法打开FXML文件

  28. 28

    如何使用Scenic将消息从一个场景发送到另一个场景?

  29. 29

    iOS故事板:5秒后自动从一个场景过渡到另一个场景

热门标签

归档