简体   繁体   English

单击Java FXML的调用方法

[英]Java FXML calling methods on button clicks

I am creating a basic game launcher in JavaFX with SceneBuilder. 我正在使用SceneBuilder在JavaFX中创建一个基本的游戏启动器。 Since SceneBuilder works in FXML, my launcher layout is in FXML. 由于SceneBuilder在FXML中工作,因此我的启动器布局在FXML中。 I have a method in my main class that I want to call on a button click. 我的主类中有一个要单击按钮调用的方法。 I read that you could use 我读到你可以用

#methodName

In the button's 在按钮的

onAction

property, but this does not work. 属性,但这不起作用。

My main Java class: 我的主要Java课:

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

My FXML file: 我的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>

You need to create a separate Controller class and specify it in top AnchorPane tag with fx:controller="packageName.Classname" 您需要创建一个单独的Controller类,并在顶部的AnchorPane标记中使用fx:controller="packageName.Classname"

Like this: 像这样:

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

The called method should be inside the specified Controller class. 被调用的方法应该在指定的Controller类内。

com.packageName is just an example, you should use the name of the package where you put the Controller class or no package name if it's not in any package. com.packageName只是一个示例,您应该使用放置Controller类的包的名称,如果不在任何包中,则不要使用任何包名。

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

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