单击按钮时Java FXML调用方法
我正在使用SceneBuilder在JavaFX中创建一个基本的游戏启动器。因为SceneBuilder在FXML中工作,所以我的启动程序布局在FXML中。我在我的主类中有一个方法,我想在单击按钮时调用它。我读到你可以用单击按钮时Java FXML调用方法,java,javafx,fxml,Java,Javafx,Fxml,我正在使用SceneBuilder在JavaFX中创建一个基本的游戏启动器。因为SceneBuilder在FXML中工作,所以我的启动程序布局在FXML中。我在我的主类中有一个方法,我想在单击按钮时调用它。我读到你可以用 #methodName 在按钮的 onAction 属性,但这不起作用 我的主要Java类: @FXML private void launchGame(ActionEvent e) { System.out.println("Launching..."); }
#methodName
在按钮的
onAction
属性,但这不起作用
我的主要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();
}
我的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>
您需要创建一个单独的控制器类,并使用
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">
被调用的方法应位于指定的控制器类内
com.packageName
只是一个例子,您应该使用放置控制器类的包的名称,或者如果它不在任何包中,则不使用包的名称。您需要创建一个单独的控制器类,并使用fx:Controller=“packageName.Classname”在topancorpane
标记中指定它
像这样:
<AnchorPane xmlns:fx="http://javafx.com/fxml/1"
xmlns="http://javafx.com/javafx/8.0.102"
fx:controller="com.packageName.Controller">
被调用的方法应位于指定的控制器类内
com.packageName
只是一个例子,您应该使用放置控制器类的包的名称,或者如果它不在任何包中,则不使用包名称。您不应该直接编辑FXML文件。SceneBuilder允许您指定控制器、组件ID和操作。您是否通过SceneBuilder指定了操作?不,我没有,我在EclipseSorry中写道,我误读了您的评论。当然应该使用SceneBuilder。在使用SceneBuilder时,几乎不必直接编辑FXML文件。添加fx:id
s和事件处理程序并指定控制器类后,SceneBuilder还可以为控制器生成框架代码。转到菜单上的“查看”并选择“显示骨架控制器代码”。然后,您可以将控制器代码复制并粘贴到IDE中(控制器必须在IDE中编辑,而不是在SceneBuilder中编辑)。您不需要直接编辑FXML文件。SceneBuilder允许您指定控制器、组件ID和操作。您是否通过SceneBuilder指定了操作?不,我没有,我在EclipseSorry中写道,我误读了您的评论。当然应该使用SceneBuilder。在使用SceneBuilder时,几乎不必直接编辑FXML文件。添加fx:id
s和事件处理程序并指定控制器类后,SceneBuilder还可以为控制器生成框架代码。转到菜单上的“查看”并选择“显示骨架控制器代码”。然后可以将控制器代码复制并粘贴到IDE中(控制器必须在IDE中编辑,而不是在SceneBuilder中编辑)。