从正在运行的javafx应用程序打开一个新的javafx窗口时,我无法将fxml变量绑定到控制器类中的局部变量。
请注意,对于正在运行的应用程序,我能够毫无问题地绑定到同名变量,在运行时在正在运行的应用程序中填充ComboBox。欢迎任何解决方案。
调用新类的代码(ServerConfigChooser)
FXMLLoader loader = new FXMLLoader(getClass().getResource("ServerConfigChooser.fxml"));
try{
Stage stage = new Stage();
stage.setScene(new Scene( (Parent) loader.load()));
stage.show();
} catch (IOException ex)...
在正在运行的应用程序中运行的绑定示例(在运行时执行的代码)
@FXML
public ComboBox cb_01_fxid;
private void initComboBox(){
cb_01_fxid.getItems().add(0, "yes");
cb_01_fxid.getItems().add(0, "no");
}
fxid“cb_01_fxid”在控制器类中与.fxml文件中的ComboBox对象的fxid相同。这没有问题。下面是新窗口的控制器类的代码(ServerConfigChooser)。
1 @FXML
2 public ComboBox cb_02_fxid;
3
4 public void initComboBoxNewWindow(){
5 cb_02_fxid.addItems(0, "test item 1");
6 }
以及主应用程序中的相关fxml行
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="728.9999000000025" prefWidth="735.0000999999975" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="model.Sample">
和新窗口
<fx:root type="javafx.scene.layout.AnchorPane" id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="283.0" prefWidth="445.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="model.ServerConfigChooser">
<ComboBox id="cb_02_fxid" layoutX="256.0" layoutY="84.0" onAction="#scc_cb_action">
程序在第5行抛出空指针异常(添加行号以供参考)。有谁知道为什么第二个控制器没有绑定到第二个fxml对象?提前致谢
答案 0 :(得分:4)
您的ComboBox fxml部件应设置fx:id
属性:
<ComboBox fx:id="cb_02"
此ID应与Controller类中的变量具有完全相同的名称。
有关详细信息,请参阅教程:http://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm