首先新建一个JavaFXproject
然后看到sample这个package里面有三个文件,分别是Main.java,Controller.java,sample.fxml,我们主要使用fxml中的scenebuilder来构建界面,使用Controller来控制fxml中的界面构件
现在删除其中的GridPane,添加一个AnchorPane,并在Text中加入fx:controller="sample.Controller"
来指定Controller,
加到Text中AnchorPane的最后
拖动一个Button到AnchorPane中并设定fxID
回到Controller,修改
package sample;
public class Controller {
}
为
package sample;
import javafx.fxml.Initializable;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller implements Initializable{
public void initialize(URL location, ResourceBundle resources)
{
}
}
其中的Initializable
接口里面包含了一个方法initialize(java.net.URL location, java.util.ResourceBundle resources)
,官方文档的解释如下
Called to initialize a controller after its root element has been completely processed.
即重写这个方法可以用作Controller的初始化以及根组件的运行,可以在这个方法里面初始化你的各种组件
定义按钮变量以及事件方法
package sample;
import javafx.fxml.Initializable;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller implements Initializable{
public Button button;
public void initialize(URL location, ResourceBundle resources)
{
}
public void Button_Click(ActionEvent actionEvent)
{
System.out.println("Button Click!");
}
}
回到scenebuilder关联方法跟点击事件
main中设置窗口大小为600*400,运行成功
primaryStage.setScene(new Scene(root, 600, 400));
要注意的是,按alt+enter引用包的时候,要保证引用正确的包,如事件处理引用的包是import javafx.event.ActionEvent
而不是import java.awt.event.ActionEvent
,否则会显示fxml无法识别该方法