如何将参数传递给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
我希望基于某些值更新文本字段中的文本.为了使这个样本更简单,我使我的程序更小.问题似乎是当我把top.setText("这是我的新文本")时;
我看了一下: 如何在java fx 2中更改TextField的文本
但答案似乎没有意义.我不知道为什么要初始化已经实现的文本字段.无论它不起作用.
我还看了一下: NullPointerException(JavaFX Label.setText())
这似乎与我认为的问题最接近,但是当我做了以下操作时,我得到了一个错误.为了清楚起见,这是在JavaFXApplication5类中.
try {
FXMLLoader loader = new FXMLLoader(
getClass().getResource("FXML.fxml")
);
FXMLLoader.setController(this); // non-static method setController(Object)
// can not be referenced from static context ERROR****
Parent root = (Parent) loader.load();
/*Parent root = FXMLLoader.load(getClass().getResource("FXML.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("java code");
stage.show();
*/
}
Run Code Online (Sandbox Code Playgroud)
从网上阅读我想知道是否有竞争条件:http://gotoanswer.stanford.edu/nullpointerexception_in_javafx_initialize_method-8807679/
所以我尝试过:
Platform.runLater(new Runnable() {
@Override public void run() {
top.setText("This is my new Text");
}
});
Run Code Online (Sandbox Code Playgroud)
但那没用.我知道它可以在Scene Builder中设置,但我需要一种方法来根据另一个类的值动态地更改它.如果我能弄清楚如何设置它,我可以弄清楚如何做这个部分.希望这足以得到一些帮助.
FXMLController Class:
public class FXMLController …Run Code Online (Sandbox Code Playgroud)