gpt4 book ai didi

JavaFX : How to fill a ComboBox with changing values and refrech it

转载 作者:行者123 更新时间:2023-11-30 07:52:24 25 4
gpt4 key购买 nike

我正在开展一个管理小学的教育项目。我正在尝试使用 javaFX 设置用户界面,并且还使用 SQLite DB。

当我设置两个组合框时出现的问题,一个用于学生级别 cb_nv,另一个用于cb_nb > 为所选级别中的类(class)编号cb_nv 已初始化并且工作正常,第二个 ComboBox 应采用从 cb_nv 返回的值 lvl 并且应仅显示 BD 中存在的类。这是我的方法:

@FXML
ComboBox<String> cb_nb, cb_nv;
int lvl=1;
int nb=1;
ObservableList<String> optionslvl=FXCollections.observableArrayList("A","B","C","D");
ObservableList<String> optionsnb=bdClss.getNBListByLvl(lvl);

...

cb_nv.setItems(optionslvl);
cb_nv.setValue("A");
cb_nb.setItems(optionsnb);
cb_nb.setValue("1");

列表已成功从 BD 获取,并在 cb_nb(lvl=1) 中显示,没有任何问题,但是当我更改 cb_nv 到“B”我仍然得到“A”类列表。这是应该进行更改的代码部分:

    cb_nv.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
nb=1;
cb_nb.setValue("1");
if(cb_nv.getItems().get((Integer) number2)=="A"){
lvl=0;
cb_nb.getItems().clear();
cb_nb.setItems(bdClss.getNBListByLvl(lvl));}
else if(cb_nv.getItems().get((Integer) number2)=="B"){
lvl=1;
cb_nb.getItems().clear();
cb_nb.setItems(bdClss.getNBListByLvl(lvl));}
else if(cb_nv.getItems().get((Integer) number2)=="C"){
lvl=2;
cb_nb.getItems().clear();
cb_nb.setItems(bdClss.getNBListByLvl(lvl));}
else if(cb_nv.getItems().get((Integer) number2)=="D"){
lvl=3;
cb_nb.getItems().clear();
cb_nb.setItems(bdClss.getNBListByLvl(lvl));}
else{System.err.println("Erreur lors de changement de class..");}
}
});

cb_nb.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
if(cb_nb.getItems().get((Integer) number2)=="1"){nb=1;}
else if(cb_nb.getItems().get((Integer) number2)=="2"){nb=2;}
else if(cb_nb.getItems().get((Integer) number2)=="3"){nb=3;}
else if(cb_nb.getItems().get((Integer) number2)=="4"){nb=4;}
else if(cb_nb.getItems().get((Integer) number2)=="5"){nb=5;}
else if(cb_nb.getItems().get((Integer) number2)=="6"){nb=6;}
else if(cb_nb.getItems().get((Integer) number2)=="7"){nb=7;}
else if(cb_nb.getItems().get((Integer) number2)=="8"){nb=8;}
else if(cb_nb.getItems().get((Integer) number2)=="9"){nb=9;}
else{System.err.println("Erreur lors de changement de class..");}
}
});

我最终需要返回的nb值。但用户不应该选择不存在类别,因为接下来程序将在BD中搜索它。我需要修复 cb_nb 以仅显示有效的选择..

<小时/>

编辑:

第一个问题已经解决,它现在显示了正确的选项,但是每次从带有类的 lvl 移动到另一个空的 lvl 时都会出现异常..并且 if() 进入最终状态else{} 一路走来!

Erreur lors de changement de class..
Exception in thread "JavaFX Application Thread" java.lang.ArrayIndexOutOfBoundsException

任何建议都会有所帮助..我是否应该考虑改变所有方法,因为它看起来太错误了..谢谢

最佳答案

规则 1 ComBox 的选择模型与所有可用的选择模型不同,因此,如果您使用 ComBox 并且您有大约 10 个项目,并且选择第 4 个项目 -如果索引为 3,并且您稍后清除项目并添加 11 个项目,则您的选择是索引 3 中的第 4 个项目。除非您明确执行此操作,否则 ComBox 的值永远不会重置。

如果您遇到 ArrayOutOfBoundsException 索引不存在 -(希望您已经看到问题)

关于JavaFX : How to fill a ComboBox with changing values and refrech it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33177918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com