Javafx 填充FXML中定义的Choicebox
我正在学习javaFX,我的问题是我有一个带有选择框和按钮的简单窗口。此窗口通过FXML定义,FXML也与控制器类关联。 我想知道如何使用controller类中的数据填充此choicebox,因为使用@FXML引用此choicebox会引发Javafx 填充FXML中定义的Choicebox,javafx,fxml,Javafx,Fxml,我正在学习javaFX,我的问题是我有一个带有选择框和按钮的简单窗口。此窗口通过FXML定义,FXML也与控制器类关联。 我想知道如何使用controller类中的数据填充此choicebox,因为使用@FXML引用此choicebox会引发NullPointerException 编辑-添加源代码 FXML代码 <AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-I
NullPointerException
编辑-添加源代码
FXML代码
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="240.0"
prefWidth="320.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="supermarket.ManageWindowCC">
<children>
<ChoiceBox fx:id="countChoiceBox" layoutX="44.0" layoutY="71.0" prefHeight="25.0" prefWidth="191.0"/>
<Label layoutX="44.0" layoutY="54.0" text="To change item's count, choose one"/>
<TextField layoutX="140.0" layoutY="129.0" prefHeight="25.0" prefWidth="24.0"/>
<Label layoutX="123.0" layoutY="112.0" text="New count"/>
<Button layoutX="126.1875" layoutY="171.5" mnemonicParsing="false" text="Submit"/>
</children>
感谢您的帮助和时间如何修复它 删除行
countChoiceBox=new ChoiceBox()如果应用程序中没有其他bug,那么代码>和所有内容都可以正常工作
程序将使用对countChoiceBox的引用,countChoiceBox是FXMLLoader创建并在场景中设置的节点层次结构的一部分
发生了什么事
在onChangeCount中加载新的FXML单击将:
创建一个新的超市.ManageWindowCC
控制器
根据FXML定义创建节点层次结构
层次结构中的一个节点将是ChoiceBox
FXML加载程序自动为您创建的ChoiceBox将分配给countChoiceBox成员
然后获取指定给root的节点层次,并将其添加到新舞台上的新场景中
因此,加载FXML后,countChoiceBox被初始化为FXML加载程序实例化的空ChoiceBox
到目前为止一切都很好
然后你会(错误地)写下:
您违反的经验法则是=>永远不要使用new
创建一个属性,为标记为@FXML
的成员赋值
另请参见相关示例(尽管该示例使用组合框并直接在FXML中填充其数据,因此它不直接适用于您的情况)。@使用FXML
步骤1:在场景生成器中添加一个选择框,并将其称为“可能”(choiceBox)
步骤2:在控制器中添加以下代码
@FXML
私人选择箱选择箱
@Override
public void initialize(URL url, ResourceBundle rb) {
ObservableList<String> list = FXCollections.observableArrayList();
list.addAll("choice1", "choice2","choice3");
//populate the Choicebox;
choiceBox .setItems(list);
}
@覆盖
公共void初始化(URL、ResourceBundle rb){
ObservableList=FXCollections.observableArrayList();
列表。添加所有(“选项1”、“选项2”、“选项3”);
//填充Choicebox;
choiceBox.setItems(列表);
}
请编辑您的问题并添加一些代码,例如fxml和Controller类,您在其中引用了Choicebox。感谢您非常聪明的解释。现在我知道这个代码应该可以工作了。异常仍然存在,但正如您所提到的,在控制器类的其余部分中必须存在一些其他错误。我还不了解windows之间的所有机制和关系。更具体地说:此窗口应在单击另一个阶段中的按钮后显示,但这些阶段共享相同的ManageWindowCC
控制器。Som可能这就是空指针的原因一般来说,如果你创建了一个包含完整的独立代码的系统,有人可以编译并执行它而无需修改,这是获得帮助和确保您的程序按预期运行的有效方法。过去几个小时我在搜索stackowerflow,我发现您的专业答案您是最好的。我终于明白了如何在控制器之间传递参数非常感谢:)
countChoiceBox = new ChoiceBox();
@Override
public void initialize(URL url, ResourceBundle rb) {
ObservableList<String> list = FXCollections.observableArrayList();
list.addAll("choice1", "choice2","choice3");
//populate the Choicebox;
choiceBox .setItems(list);
}