JavaFX - 在没有 FXLoader 的情况下加载 FXML 文件
JavaFX - load FXML-file without FXLoader
我正在试验 "new" JavaFX,它运行良好。
现在我正处于一个我无法理解的地步。我的视图有一个控制器,我想从主方法加载我的控制器,以便控制器可以加载视图或做任何它喜欢的事情。
我的问题是,我必须使用 FXMLLoader.load()
方法加载我的 FXML 文件。 FXMLLoader 自己加载控制器。所以实际上,使用我的方法,我将加载控制器两次:我使用 XController xcontroller = new XController();
加载控制器,并在该控制器内部我使用 FXMLLoader.load()
加载 te 视图,这将再次加载控制器。
我必须使用 FXMLLoader
还是可以让我的控制器使用其他方法加载视图?
edit 我想使用 Presentation-Abstraction-Control (PAC) 模式(MVC 的变体),这就是为什么我认为让控制器加载视图很重要。
主要class
public class Main extends Application
{
Override
public void start(Stage primaryStage)
{
LoginController loginController = null;
try
{
loginController = new LoginController();
loginController.loadSceneInto(primaryStage);
primaryStage.show();
}
.......
public static void main(String[] args)
{
launch(args);
}
}
控制器
public class LoginController
{
.....
public void loadSceneInto(Stage stage) throws IOException
{
this.stage = stage;
Scene scene = null;
Pane root = null;
try
{
root = FXMLLoader.load(
getClass().getResource(
this.initialView.getPath()
)
);
scene = new Scene(root, initialWidth, initialHeight);
this.stage.setTitle(this.stageTitle);
this.stage.setScene(scene);
this.centralizeStage();
}
.....
}
}
如果我没理解错的话,不是
root = FXMLLoader.load(
getClass().getResource(
this.initialView.getPath()
)
);
随便做
FXMLLoader loader = new FXMLLoader(
getClass().getResource(this.initialView.getPath());
);
loader.setController(this);
root = loader.load();
您需要从 FXML 文件中删除 fx:controller
属性才能使其生效。
我正在试验 "new" JavaFX,它运行良好。
现在我正处于一个我无法理解的地步。我的视图有一个控制器,我想从主方法加载我的控制器,以便控制器可以加载视图或做任何它喜欢的事情。
我的问题是,我必须使用 FXMLLoader.load()
方法加载我的 FXML 文件。 FXMLLoader 自己加载控制器。所以实际上,使用我的方法,我将加载控制器两次:我使用 XController xcontroller = new XController();
加载控制器,并在该控制器内部我使用 FXMLLoader.load()
加载 te 视图,这将再次加载控制器。
我必须使用 FXMLLoader
还是可以让我的控制器使用其他方法加载视图?
edit 我想使用 Presentation-Abstraction-Control (PAC) 模式(MVC 的变体),这就是为什么我认为让控制器加载视图很重要。
主要class
public class Main extends Application
{
Override
public void start(Stage primaryStage)
{
LoginController loginController = null;
try
{
loginController = new LoginController();
loginController.loadSceneInto(primaryStage);
primaryStage.show();
}
.......
public static void main(String[] args)
{
launch(args);
}
}
控制器
public class LoginController
{
.....
public void loadSceneInto(Stage stage) throws IOException
{
this.stage = stage;
Scene scene = null;
Pane root = null;
try
{
root = FXMLLoader.load(
getClass().getResource(
this.initialView.getPath()
)
);
scene = new Scene(root, initialWidth, initialHeight);
this.stage.setTitle(this.stageTitle);
this.stage.setScene(scene);
this.centralizeStage();
}
.....
}
}
如果我没理解错的话,不是
root = FXMLLoader.load(
getClass().getResource(
this.initialView.getPath()
)
);
随便做
FXMLLoader loader = new FXMLLoader(
getClass().getResource(this.initialView.getPath());
);
loader.setController(this);
root = loader.load();
您需要从 FXML 文件中删除 fx:controller
属性才能使其生效。