2014-10-28 43 views
1

我有一個ArrayList:的ListView數據綁定 - JavaFX的

List<Column> listOfColumns = new ArrayList(); 

我如何可以綁定該列表到ListView?它應該始終顯示列表中的列。

還有,我用

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

現在做出的ListView只包含列,但一列是包含一個名稱(字符串)和一個數組列表中的對象,所以現在我的ListView同時顯示列的名稱和列中數組列表的內容。有沒有辦法讓ListView只顯示列的名字?

enter image description here

我像這樣做的原因,是因爲這樣我可以用listView.getSelectionModel()。getSelectedItem(),它返回一個列。

回答

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對象。

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

非常感謝你爲這個..我一直在尋找了這麼久,我居然忘了我有回報:如果你使用toString()或只是accesing字符串場打印有什麼取決於名稱+ arrayList.toString()在我重寫的toString方法!很棒:D – miniHessel 2014-10-28 11:04:39