在javafx中从数据模型动态填充ListView

在javafx中从数据模型动态填充ListView,java,listview,javafx,arraylist,model-view-controller,Java,Listview,Javafx,Arraylist,Model View Controller,我创建了一个方法,用符合正确条件的对象填充ListView: public void setCourseModules(Collection<Module> modules) { t1UnSel.getItems().clear(); t2UnSel.getItems().clear(); t1Sel.getItems().clear(); t2Sel.getItems().clear(); yrSel.getItems().clear();

我创建了一个方法,用符合正确条件的对象填充ListView:

public void setCourseModules(Collection<Module> modules) {

    t1UnSel.getItems().clear();
    t2UnSel.getItems().clear();
    t1Sel.getItems().clear();
    t2Sel.getItems().clear();
    yrSel.getItems().clear();

    modules.forEach(m -> {
        if (m.getRunPlan().equals(Delivery.TERM_1)) {
            if (m.isMandatory()) {
                t1Sel.getItems().add(m);
            } else {
                t1UnSel.getItems().add(m);
            }
        } else if (m.getRunPlan().equals(Delivery.TERM_2)) {
            if (m.isMandatory()) {
                t2Sel.getItems().add(m);
            } else {
                t2UnSel.getItems().add(m);
            }
        } else {
            yrSel.getItems().add(m);
        }
    });
}
然而,这只是一个硬编码的条目,要从数组中获取第一个课程,我需要能够根据组合框选择动态更改该索引,努力思考如何在不硬编码的情况下将课程名称的索引获取为int


附件是要点,学生设置类和控制器是最重要的,包含组合框和控制器的学生类具有课程数据声明。

我对您的问题的看法是,您需要获取所选组合框值。ComboBox具有值属性:

public ObjectProperty<T> valueProperty();
如果 输入不可编辑,如果可编辑,则为最近的用户 操作:用户输入的值或最后选定的项目

我只是想扩大他的回答

你可以用

myComboBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
    @Override
    public void changed(ObservableValue observable, Object oldValue, Object newValue) {
        //do something with selected item
    }
});


那有帮助!虽然我没有得到该值,但我创建了一个方法来获取所选索引,并将该方法放入setCourseModules方法中。不过你肯定让我走上了正轨,谢谢!我做了一个类似的public int getcboValue{int index=cboCourse.getSelectionModel.getSelectedIndex;return index;}并在课程[x]中调用它,它似乎有效,它与您的建议相比如何?区别在于您的代码只有在您在代码中调用它时才会返回一个值,每次您在UI中的复选框中选择一个值时,我的方法将触发放置在已更改方法中的操作
myComboBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
    @Override
    public void changed(ObservableValue observable, Object oldValue, Object newValue) {
        //do something with selected item
    }
});
myComboBox.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        //do something with selected index
    }
});