我正在尝试创建一个以网格开头的用户界面。我在scenebuilder中构建了网格,现在我想使用我的控制器添加列和行。但是,我的程序似乎没有在我的控制器中运行initialise(),因为网格不会改变大小。 这是我的主要课程:
import javafx.application.Application;
import javafx.fxml.FXMLLoader; import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
//@Override
public void start(Stage primaryStage) {
try {
int width = 7;
int height = 7;
final FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("GUI.fxml"));
loader.setController(new GUIController(width, height));
final Parent root =
FXMLLoader.load(getClass().getResource("GUI.fxml"));
final Scene scene = new Scene(root);
primaryStage.setTitle("GUI");
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
这是我的控制器类:
import javafx.fxml.FXML;
import javafx.scene.layout.GridPane;
public class GUIController {
private int width;
private int height;
public GUIController(int givenWidth, int givenHeight) {//runs this
width = givenWidth;
height = givenHeight;
}
@FXML
public void initialize() { //doesn't run this
SetGrid.build(gridpane, width, height);
}
这是我第一次在javafx写作,所以我可能犯了简单的错误,抱歉。
答案 0 :(得分:5)
您正在调用静态 FXMLLoader.load(URL)
方法。由于它是静态方法,因此它实际上并不引用您创建的FXMLLoader
实例,因此它不会引用您设置的控制器。
不使用参数调用实例方法load()
:
final Parent root = loader.load();
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
int width = 7;
int height = 7;
final FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("GUI.fxml"));
loader.setController(new GUIController(width, height));
final Parent root = loader.load();
final Scene scene = new Scene(root);
primaryStage.setTitle("GUI");
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}