我正在将SceneBuilder与Netbeans的JavaFX库结合使用。我使用Scenebuilder为控制器类创建fxml和netbeans。目标是构建要部署的相当复杂的应用程序。
我可以启动JavaFX应用程序并连接好控制器类。但是,当我尝试打开新窗口时,似乎无法将控制器类绑定到新窗口。为了简单起见,由于后端复杂,我想为新窗口提供一个单独的控制器类。
TL; DR-尝试使用控制器类在JavaFX应用程序上打开新窗口。控制器类未绑定。
下面的代码示例
模型类-用于启动应用程序的包装器
public class Model extends Application{
public static void main(String[] args){
Application.launch(Model.class, args);
}
@Override
public void start(Stage stage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
stage.setScene(new Scene(root));
stage.show();
}
}
Sample.fxml-主应用程序的fxml文件
Sample.java -扩展了Initializable,是Sample.fxml的控制器类。下面是代码片段,我尝试在其中打开名为“ ServerConfigChooser”的新窗口
try{
Parent root = FXMLLoader.load(getClass().getResource("ServerConfigChooser.fxml"));
FXMLLoader loader = new FXMLLoader(getClass().getResource("ServerConfigChooser.fxml"));
ServerConfigChooser controller = new ServerConfigChooser();
loader.setController(controller);
loader.setRoot(root);
Stage stage = new Stage();
stage.setScene(new Scene(root));
stage.show();
} catch (IOException ex)
ServerConfigChooser.java-实现可初始化
这是我遇到的问题。我不能简单地声明与.fxml文件中的变量具有相同fxid的变量。调用该类时不会触发initialize()方法。
ServerConfigChooser类中构造函数的原因是我无法自动触发initialize()方法。我在构造函数中手动触发。
欢迎任何解决方案!
不要像这样两次加载FXML。您可以多次加载同一.fxml文档(多个场景图/控制器),但是如果您要一起加载场景图并初始化控制器,则只需调用fxml加载器一次。
这是一个例子
FXMLLoader loader = new FXMLLoader(getClass().getResource("ServerConfigChooser.fxml"));
ServerConfigChooser controller = new ServerConfigChooser();
loader.setController(controller);
loader.setRoot(controller);
Parent root;
try {
root = (Parent) loader.load();
Scene scene = new Scene(root, 320, 200);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
} catch (IOException ex) {
Logger.getLogger(ServerConfigChooser.class.getName()).log(Level.SEVERE, null, ex);
}
注意
FXMLLoader
类的这种方式冲突例如控制器类
public class ServerConfigChooser extends AnchorPane implements Initializable {
...
}
和.fxml
<fx:root type="javafx.scene.layout.AnchorPane" id="AnchorPane" prefHeight="200.0" prefWidth="320.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句