如何将参数传递给javafx中的辅助窗口?有没有办法与相应的控制器通信?
例如:用户从a中选择一个客户,TableView并打开一个新窗口,显示客户的信息.
Stage newStage = new Stage();
try
{
AnchorPane page = (AnchorPane) FXMLLoader.load(HectorGestion.class.getResource(fxmlResource));
Scene scene = new Scene(page);
newStage.setScene(scene);
newStage.setTitle(windowTitle);
newStage.setResizable(isResizable);
if(showRightAway)
{
newStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
newStage将是新窗口.问题是,我找不到告诉控制器在哪里查找客户信息的方法(通过传递id作为参数).
有任何想法吗?
parameters dependency-injection javafx parameter-passing fxml
脚本
我正在创建一个GUI,其中多个视图引用相同的模型对象.
我习惯了什么
在Swing中,如果我希望所有视图都引用相同的模型,我会将模型传递给构造函数.
我目前正在做什么
在JavaFX中,我通过在每个视图/控制器加载后在视图/控制器(菜单栏,拆分窗格,制表符......)中设置setter方法来传递模型.我发现这非常俗气和笨重.另外,我发现它不起作用,因为在某些情况下我需要在初始化某些控制器小部件之前模型已经存在于控制器中.
Lackluster Alternatives
(注意:我正在引用这些stackoverflow问题:
依赖注入
将模型对象保存为公共静态变量
将参数从调用者传递到控制器
我希望每个控制器在其构造函数中加载自身,并且我希望每个自定义控制器自动注入其父控制器.例如,卡片概述选项卡会像这样加载自身:
public CardOverviewTab() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("card_overview_tab.fxml"));
fxmlLoader.setRoot(content);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)并且SingleGameSetup控制器将卡概述选项卡自动注入变量:
public class SingleGameSetupController extends AnchorPane {
@FXML private CardOverviewTab cardOverviewTab;
// Rest of the class
}
Run Code Online (Sandbox Code Playgroud)包含卡片概述选项卡的fxml部分如下所示:
<CardOverviewTab fx:id="cardOverviewTab" />
Run Code Online (Sandbox Code Playgroud)这样我不需要担心手动加载控制器,但我仍然有设置模型的问题.
在FXMLLoader上设置控制器
活动巴士
独生子
我在寻找什么
有没有办法以不那么繁琐的方式传递模型对象?我正在寻找一种简单的方法,如将模型传递给构造函数,但我不想处理通过FXMLLoader手动加载控制器,或者在加载控制器后设置模型.也许有一个类来检索模型是最好的选择,但我要求以防万一有更好的方法.
我正在使用Netbeans 7.2和Scene Builder 1.0来开发JavaFX应用程序.我设置了主屏幕,我想拥有它,所以我点击一个按钮,它将关闭主窗口并打开另一个.主Stage对象位于主类中,但控制器类是独立的,并且不能访问它,因为它不是静态的并且在不同的类中.如何更改场景或舞台?
考虑以下样本.
如何访问控制器中应用程序的参数/参数?
谢谢.
注意:我曾尝试将App.java和MyController.java混合在一个Class文件中,但没有帮助.
App.java(简化):
public class App extends Application {
public static void main(String[] args) {
Application.launch(App.class, args);
}
@Override
public void start(Stage primaryStage) throws Exception {
// output arguments in console
System.out.println(getParameters().getNamed().toString());
Parent root = FXMLLoader.load(getClass().getResource("MyView.fxml"));
final Scene scene = new javafx.scene.Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
MyController.java(简化):
public class MyController implements Initializable {
@Override
public void initialize(URL url, ResourceBundle rb) {
// HOW TO getParameters() HERE ?
}
@FXML
private Button myButton;
@FXML
private void my_Action(ActionEvent event) { …Run Code Online (Sandbox Code Playgroud) java ×3
javafx ×3
fxml ×2
controller ×1
javafx-2 ×1
netbeans ×1
parameters ×1
scene ×1
scenebuilder ×1