ArrayList中的Databind ListView - javafx

时间:2014-10-28 10:00:49

标签: listview javafx

我有一个ArrayList:

List<Column> listOfColumns = new ArrayList();

如何将此列表绑定到listView?它应该始终显示此列表中的列。

另外,我使用

    final ObservableList<Columns> data = FXCollections.observableArrayList();

现在使ListView只包含Columns,但Column是一个包含名称(字符串)和数组列表的对象,所以我的ListView现在显示列的名称和数组列表的内容在专栏中。有没有办法让ListView只显示列的名称?

enter image description here

我这样做的原因是因为我可以使用listView.getSelectionModel()。getSelectedItem(),并返回一列。

1 个答案:

答案 0 :(得分:2)

鉴于Column是包含一个String字段和一个ArrayList的POJO,默认情况下ListView中显示的内容由toString()给出方法

您只需自定义此方法即可显示所需内容:

private class Column {

    private String name;

    private ArrayList<String> list;

    public Column(String name, ArrayList list) {
        this.name = name;
        this.list = list;
    }

    // getters and setters

    @Override
    public String toString() {
        //return name + list; 
        return name;          
    }
}

无论如何,如果选择了行,则侦听器将返回Column对象。您在那里打印的内容取决于您是否正在使用toString()或仅访问字符串字段:

list.getSelectionModel().selectedItemProperty().addListener(
    (observable,oldValue,newValue)->{
        System.out.println("Selected item: " + newValue);
        System.out.println("Selected item: " + newValue.getName());
    });