首页 > 解决方案 > 从javafx中的数据模型动态填充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);
        }
    });
}

并调用它:

smp.setCourseModules(course[0].getModulesOnCourse());

但是,这只是从数组中获取第一门课程的硬编码条目,我需要能够根据组合框选择动态更改该索引,努力思考如何将课程名称的索引作为 int 获取硬编码它...

附上要点,Student Setup类和Controller最重要,包含comboBox和Controller的Student类有课程数据声明。

标签: javalistviewjavafxarraylistmodel-view-controller

解决方案


只是为了扩展M. le Rutte的回答

你可以使用

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
    }
});

推荐阅读