繁体   English   中英

JavaFX-如何将FXML文件注入到Main的FXML按钮中?

[英]JavaFX - how to inject FXML files into Main's FXML buttons?

我正在编写一个应用程序(虚拟诊所),但我不知道如何注入FXML文件(在MainController.FXML中注入),该文件将在单击按钮后显示,之前我将其注入到Main.FXML的Button行之间,但是它不起作用,我是说它确实起作用,但是随后包含的FXML始终可见,并且我想以CheckOutPatient.FXML在Main.FXML中的“ optionPane”空间中单击“ checkoutButton”时将可见,这是一个代码:

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>

CheckOutPatient.FXML:

<BorderPane fx:id="checkoutpatient" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.CheckOutPatientController">
    <center>
     <Pane prefHeight="497.0" prefWidth="572.0" BorderPane.alignment="CENTER">
      <children>
        <VBox layoutX="-1.0" prefHeight="450.0" prefWidth="112.0" />
        <Pane opacity="0.85" prefHeight="497.0" prefWidth="572.0" style="-fx-background-color: #81a1b9;">
           <children>
              <TextField layoutX="247.0" layoutY="377.0" prefHeight="25.0" prefWidth="115.0" />
              <TextField layoutX="247.0" layoutY="337.0" prefHeight="25.0" prefWidth="116.0" />
              <TextField layoutX="247.0" layoutY="413.0" prefHeight="25.0" prefWidth="116.0" />
              <TextField layoutX="230.0" layoutY="255.0" prefHeight="25.0" prefWidth="176.0" />
              <Label layoutX="152.0" layoutY="380.0" text="Rodzaj pokoju:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="152.0" layoutY="340.0" text="Numer pokoju:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="152.0" layoutY="416.0" text="Data rejestracji:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="152.0" layoutY="21.0" text="PID:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="152.0" layoutY="62.0" text="Imię:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="152.0" layoutY="102.0" text="Nazwisko:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="152.0" layoutY="137.0" text="Płeć:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="152.0" layoutY="177.0" text="Wiek:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="152.0" layoutY="218.0" text="Telefon:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="152.0" layoutY="258.0" text="Adres:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="152.0" layoutY="299.0" text="Dolegliwość:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <TextField fx:id="infodiseaseField" layoutX="231.0" layoutY="299.0" onAction="#enteredInfoAboutPatient" prefHeight="25.0" prefWidth="136.0" />
              <TextField layoutX="-41.0" layoutY="564.0" prefHeight="25.0" prefWidth="267.0" />
              <TextField fx:id="infophonenumberField" layoutX="231.0" layoutY="218.0" onAction="#enteredInfoAboutPatient" prefHeight="25.0" prefWidth="138.0" />
              <TextField fx:id="infoageField" layoutX="231.0" layoutY="177.0" onAction="#enteredInfoAboutPatient" prefHeight="25.0" prefWidth="138.0" />
              <TextField fx:id="infogenderField" layoutX="231.0" layoutY="137.0" onAction="#enteredInfoAboutPatient" prefHeight="25.0" prefWidth="139.0" />
              <TextField fx:id="infolastNameField" layoutX="231.0" layoutY="102.0" onAction="#enteredInfoAboutPatient" prefHeight="25.0" prefWidth="140.0" />
              <TextField fx:id="infonameField" layoutX="231.0" layoutY="62.0" onAction="#enteredInfoAboutPatient" prefHeight="25.0" prefWidth="140.0" />
              <TextField fx:id="infoPIDField" layoutX="231.0" layoutY="21.0" onAction="#enteredInfoAboutPatient" prefHeight="25.0" prefWidth="141.0" />
              <ListView layoutX="25.0" layoutY="18.0" prefHeight="460.0" prefWidth="117.0" />
              <Label layoutX="152.0" layoutY="450.0" text="Data wypisania:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <TextField layoutX="247.0" layoutY="447.0" prefHeight="25.0" prefWidth="116.0" />
              <MenuButton layoutX="484.0" layoutY="59.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="63.0">
                <items>
                  <MenuItem fx:id="goodCondition" mnemonicParsing="false" onAction="#chooseCondition" text="zdrowy" />
                  <MenuItem fx:id="uncertainCondition" mnemonicParsing="false" onAction="#chooseCondition" text="niepewny" />
                </items>
              </MenuButton>
              <Label layoutX="390.0" layoutY="62.0" text="Stan pacjenta:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="412.0" layoutY="137.0" text="pobyt:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <Label layoutX="380.0" layoutY="177.0" text="wyżywienie:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <TextField layoutX="463.0" layoutY="134.0" prefHeight="25.0" prefWidth="66.0" />
              <TextField layoutX="463.0" layoutY="215.0" prefHeight="25.0" prefWidth="66.0" />
              <TextField layoutX="463.0" layoutY="174.0" prefHeight="25.0" prefWidth="66.0" />
              <Label layoutX="398.0" layoutY="218.0" text="obsługa:">
                 <font>
                    <Font size="13.0" />
                 </font>
              </Label>
              <TextField layoutX="463.0" layoutY="255.0" prefHeight="25.0" prefWidth="67.0" />
              <Button fx:id="confirmButton" layoutX="424.0" layoutY="319.0" mnemonicParsing="false" prefHeight="36.0" prefWidth="100.0" text="Zatwierdź" />
              <Button fx:id="exitcheckButton" layoutX="424.0" layoutY="372.0" mnemonicParsing="false" prefHeight="36.0" prefWidth="100.0" text="Zamknij" />
              <Label layoutX="470.0" layoutY="103.0" text="Koszty">
                 <font>
                    <Font size="14.0" />
                 </font>
              </Label>
           </children></Pane>
       </children>
     </Pane>
   </center>
</BorderPane>

这个RegistrationController:

@FXML
public void handleAddPatient(ActionEvent event) {

    infoPatientController.infoageField.setText("asdf");
 }

这是错误:

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("...");

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM