JavaFX-如何将FXML文件注入Main';什么是FXML按钮?

JavaFX-如何将FXML文件注入Main';什么是FXML按钮?,java,eclipse,model-view-controller,javafx,Java,Eclipse,Model View Controller,Javafx,我正在编写一个应用程序(虚拟诊所),我不知道如何插入FXML文件(inject in MainController.FXML),单击按钮后将显示该文件,之前我在Main.FXML中的按钮行之间插入了该文件,但它不起作用,我的意思是它确实起作用,但随后包含的FXML始终可见,我想在Main.FXML中单击“optionPane”空间中的“checkburatton”时,checkoutmount.FXML将可见,下面是一个代码: Main.FXML: <BorderPane fx:id="m

我正在编写一个应用程序(虚拟诊所),我不知道如何插入FXML文件(inject in MainController.FXML),单击按钮后将显示该文件,之前我在Main.FXML中的按钮行之间插入了该文件,但它不起作用,我的意思是它确实起作用,但随后包含的FXML始终可见,我想在Main.FXML中单击“optionPane”空间中的“checkburatton”时,checkoutmount.FXML将可见,下面是一个代码:

Main.FXML:

<BorderPane fx:id="main" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.MainController">
  <center>
     <Pane prefHeight="530.0" prefWidth="750.0" BorderPane.alignment="CENTER">
       <children>
        <ImageView fitHeight="539.0" fitWidth="953.0" layoutX="-196.0" layoutY="-4.0">
           <image>
              <Image url="@../../../../../Users/Damian/Desktop/asdffff.png" />
           </image>
        </ImageView>
        <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#89a1b9" height="540.0" layoutX="-6.0" layoutY="-3.0" opacity="0.94" stroke="WHITE" strokeType="INSIDE" width="154.0" />
        <Button fx:id="registrationButton" layoutX="5.0" layoutY="72.0" mnemonicParsing="false" onAction="#chooseOption" prefHeight="27.0" prefWidth="137.0" style="-fx-background-color: #89a1b9; -fx-border-color: WHITE;" text="Zarejestruj pacjenta">
           <cursor>
              <Cursor fx:constant="HAND" />
           </cursor>
        </Button>
        <Button fx:id="infopatientButton" layoutX="5.0" layoutY="122.0" mnemonicParsing="false" onAction="#chooseOption" style="-fx-background-color: #89a1b9; -fx-border-color: WHITE;" text="Informacje o pacjencie">
           <cursor>
              <Cursor fx:constant="HAND" />
           </cursor>
        </Button>
        <Button fx:id="checkoutButton" layoutX="5.0" layoutY="172.0" mnemonicParsing="false" onAction="#chooseOption" prefHeight="27.0" prefWidth="137.0" style="-fx-background-color: #89a1b9; -fx-border-color: WHITE;" text="Wypisz pacjenta">
           <cursor>
              <Cursor fx:constant="HAND" />
           </cursor>
        </Button>
        <Button fx:id="medicalstaffButton" layoutX="5.0" layoutY="225.0" mnemonicParsing="false" onAction="#chooseOption" prefHeight="27.0" prefWidth="137.0" style="-fx-background-color: #89a1b9; -fx-border-color: WHITE;" text="Personel medyczny">
           <cursor>
              <Cursor fx:constant="HAND" />
           </cursor>
        </Button>
        <Button fx:id="usersButton" layoutX="5.0" layoutY="275.0" mnemonicParsing="false" onAction="#chooseOption" prefHeight="27.0" prefWidth="137.0" style="-fx-background-color: #89a1b9; -fx-border-color: WHITE;" text="Użytkownicy">
           <cursor>
              <Cursor fx:constant="HAND" />
           </cursor>
        </Button>
        <Button fx:id="logoutButton" layoutX="5.0" layoutY="325.0" mnemonicParsing="false" onAction="#chooseOption" prefHeight="27.0" prefWidth="64.0" style="-fx-background-color: #89a1b9; -fx-border-color: WHITE;" text="Wyloguj">
           <cursor>
              <Cursor fx:constant="HAND" />
           </cursor>
        </Button>
        <Button fx:id="exitButton" layoutX="78.0" layoutY="325.0" mnemonicParsing="false" onAction="#chooseOption" prefHeight="27.0" prefWidth="63.0" style="-fx-background-color: #89a1b9; -fx-border-color: WHITE;" text="Zamknij">
           <cursor>
              <Cursor fx:constant="HAND" />
           </cursor>
        </Button>
        <ImageView fitHeight="200.0" fitWidth="200.0" layoutX="550.0" layoutY="350.0">
           <image>
              <Image url="@../../../../../Users/Damian/Desktop/imagesff.png" />
           </image>
        </ImageView>
        <Label layoutX="36.0" layoutY="14.0" prefHeight="37.0" prefWidth="489.0" text="MENU" wrapText="true">
           <font>
              <Font size="28.0" />
           </font>
        </Label>
        <AnchorPane fx:id="optionPane" layoutX="162.0" layoutY="16.0" prefHeight="497.0" prefWidth="572.0" />
     </children>
     </Pane>
  </center>
</BorderPane>
以下是错误:

Exception in thread "JavaFX Application Thread"  java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(Unknown Source)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown  Source)
at  com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
at javafx.event.Event.fireEvent(Unknown Source)
at javafx.scene.Node.fireEvent(Unknown Source)
at javafx.scene.control.Button.fire(Unknown Source)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Unknown Source)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(Unknown Source)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
at javafx.event.Event.fireEvent(Unknown Source)
at javafx.scene.Scene$MouseHandler.process(Unknown Source)
at javafx.scene.Scene$MouseHandler.access$1500(Unknown Source)
at javafx.scene.Scene.impl_processMouseEvent(Unknown Source)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source)
at   com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$355(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source)
at com.sun.glass.ui.View.handleMouseEvent(Unknown Source)
at com.sun.glass.ui.View.notifyMouse(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$149(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.Trampoline.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
... 49 more
  Caused by: java.lang.NullPointerException
at   controller.RegistrationPatientController.handleAddPatient(RegistrationPatientController.java:228)

请尝试以下代码:

// creating a loader for the scene you want to change
FXMLLoader loader = new FXMLLoader(getClass().getResource("yourScene.fxml"));

// creating a controller to be called to customize that scene's elements
MainController controller = (MainController)loader.getController();
现在,您可以执行以下操作:

controller.yourButton.setText("...");

希望这有帮助

请尝试以下代码:

// creating a loader for the scene you want to change
FXMLLoader loader = new FXMLLoader(getClass().getResource("yourScene.fxml"));

// creating a controller to be called to customize that scene's elements
MainController controller = (MainController)loader.getController();
现在,您可以执行以下操作:

controller.yourButton.setText("...");

希望这有帮助

啊..你必须“爱”那些刚刚投票的机器人评论员,因为它看起来像是问题中的代码。你的代码不是我所说的。所有的标签,文本字段,按钮等等。不是真的相关,字体和光标似乎也不相关。似乎相关但不包括在问题中的是控制器。还有你所说的“注入FXML”是什么意思。FXML上下文中的注入通常指将对象实例指定给控制器字段。请改进您对所需行为的描述。@fabian我已经管理了它,但我的主要问题是我的控制器不想彼此通信,在RegistrationController中,我创建了一个方法(单击按钮),调用此方法后,我想在不同的FXML文件(InfoPatient.FXML)中显示文本,由InfoPatientController管理。我在帖子中粘贴了另一个代码,请检查。此帖子应该有帮助:。也可能是:。但是在以后的文章中,您确实需要学习如何识别代码的相关部分并删除不相关的部分:单个
节点
/controller存在问题。我们真的不需要知道20多个其他节点。此外,如果
infoPatientController
infoageField
null
,则您仍然没有包括分配导致NPE或选中的字段的部分。回答最简单的问题要容易得多:啊……你必须“爱”那些刚刚投票的机器人评论员,因为问题中似乎有代码。你的代码不是我所说的。所有的标签、文本字段、按钮等等。不是真的相关,字体和光标似乎也不相关。似乎相关但不包括在问题中的是控制器。还有你所说的“注入FXML”是什么意思。FXML上下文中的注入通常指将对象实例指定给控制器字段。请改进您对所需行为的描述。@fabian我已经管理了它,但我的主要问题是我的控制器不想彼此通信,在RegistrationController中,我创建了一个方法(单击按钮),调用此方法后,我想在不同的FXML文件(InfoPatient.FXML)中显示文本,由InfoPatientController管理。我在帖子中粘贴了另一个代码,请检查。此帖子应该有帮助:。也可能是:。但是在以后的文章中,您确实需要学习如何识别代码的相关部分并删除不相关的部分:单个
节点
/controller存在问题。我们真的不需要知道20多个其他节点。此外,如果
infoPatientController
infoageField
null
,则您仍然没有包括分配导致NPE或选中的字段的部分。最简单的问题更容易回答: