我正在尝试从网格开始创建用户界面。我在scenebuilder中构建了网格,现在我想使用控制器添加列和行。但是,由于网格不会改变大小,因此我的程序似乎未在控制器中运行Initialize()。
这是我的主要课程:
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编写程序,对不起,我可能犯了一些简单的错误。
最佳答案
您正在调用静态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);
}
}