这个
label
仅在FXML2的控制器中初始化(因为该FXML文件具有以下元素
fx:id="label"
)。这个
initialize()
方法在两个控制器上调用。因此,当
初始化()
在FXML1的控制器上调用,
标签
为null,则会出现null指针异常。
为每个FXML文件使用不同的控制器类:
package fxmlexample;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
/**
* FXML Controller class
*/
public class FXMLController1 implements Initializable {
@FXML
Button button;
public void pressButton(ActionEvent event) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXML2.fxml"));
Scene scene = new Scene(root);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
}
/**
* Initializes the controller class.
*
* @param url
* @param rb
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
}
}
和
package fxmlexample;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
/**
* FXML Controller class
*/
public class FXMLController2 implements Initializable {
@FXML
Label label;
/**
* Initializes the controller class.
*
* @param url
* @param rb
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
label.setText("Hello World");
}
}
最后,修改
fx:controller
属性来指向正确的类。