Java 单击按钮时的 FXML 调用方法

Java FXML calling methods on button clicks

我正在使用 SceneBuilder 在 JavaFX 中创建一个基本的游戏启动器。由于 SceneBuilder 在 FXML 中工作,因此我的启动器布局是在 FXML 中。我的主要 class 中有一个方法,我想在单击按钮时调用它。我读到你可以使用

#methodName

在按钮的

onAction

属性,但这行不通。

我的主要Javaclass:

@FXML
private void launchGame(ActionEvent e) {
    System.out.println("Launching...");
}

@Override
public void start(Stage primaryStage) throws IOException {
    Parent root = FXMLLoader.load(Main.class.getResource("launcher.fxml"));
    Scene scene = new Scene(root);
    primaryStage.setScene(scene);

    primaryStage.setTitle("First Week Login");
    primaryStage.setResizable(false);
    primaryStage.sizeToScene();

    primaryStage.show();
}

我的 FXML 文件:

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

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.text.Text?>
<?import javafx.scene.web.WebView?>


<AnchorPane xmlns:fx="http://javafx.com/fxml/1" 
xmlns="http://javafx.com/javafx/8.0.102">
<children>
  <BorderPane prefHeight="493.0" prefWidth="664.0" styleClass="background" 
stylesheets="@launcher.css">
     <bottom>
        <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" 
BorderPane.alignment="CENTER">
           <children>
              <Button alignment="CENTER" mnemonicParsing="false" 
text="Launch Game" onAction="#launchGame" />
           </children>
        </HBox>
     </bottom>
     <top>
        <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" 
BorderPane.alignment="CENTER">
           <children>
              <Text strokeType="OUTSIDE" strokeWidth="0.0" 
styleClass="title" text="First Week" />
           </children>
        </HBox>
     </top>
     <center>
        <WebView prefHeight="200.0" prefWidth="200.0" 
BorderPane.alignment="CENTER" />
     </center>
  </BorderPane>
</children>
</AnchorPane>

您需要创建一个单独的控制器 class 并在顶部 AnchorPane 标记中使用 fx:controller="packageName.Classname"

指定它

像这样:

<AnchorPane xmlns:fx="http://javafx.com/fxml/1"
 xmlns="http://javafx.com/javafx/8.0.102"
 fx:controller="com.packageName.Controller">

被调用的方法应该在指定的Controller中class.

com.packageName 只是一个示例,您应该使用放置控制器的包的名称 class 或者如果它不在任何包中则不使用包名称。