2016-11-29 78 views
0

我想要一個Jlist來顯示我自己的客戶端對象的列表。我的客戶端類有一個toString()方法,可以很好地處理System.out.print(),我不知道我的問題可能存在於哪裏。如何讓JList顯示ArrayList?

這裏是我的代碼:

private void displayClients(){ 
    List<Client> clients = new ArrayList<>(this.gym.getClients()); 
    displayClientsList.setListData(clients); 
    displayClientsList.setSelectedIndex(0); 
} 

以下是錯誤消息:

no suitable method found for setListData(List<Client>) 
method JList.setListData(String[]) is not applicable 
(argument mismatch; List<Client> cannot be converted to String[]) 
method JList.setListData(Vector<? extends String>) is not applicable 
(argument mismatch; List<Client> cannot be converted to Vector<? extends String>) 

誰能告訴我如何解決這一問題?謝謝:)

+0

您無法將客戶端轉換爲字符串,很容易 – XtremeBaumer

回答

1

這個方法的API文檔說,它需要一個Vector或數組...

https://docs.oracle.com/javase/7/docs/api/javax/swing/JList.html#setListData(E[])

嘗試...

displayClientsList.setListData(clients.toArray(new Client[0])); 

或者您可能希望自己製作一個字符串列表並顯示它們,例如...

List<String> displayList = clients.stream() 
    .map(c -> c.toString()) 
    .collect(Collectors.toList()); 

displayClientsList.setListData(displayList.toArray(new String[0])); 
+0

您可能需要將JList的通用類型更改爲字符串(不確定您是如何初始化它的......) – BretC

+0

第二個示例與問題中的代碼具有相同的問題:您無法將普通列表傳遞給setListData方法。您需要將其更改爲'.collect(Collectors.toCollection(Vector :: new))',並將displayList的類型更改爲'Vector '。 – VGR

+0

@VGR哎呀,對不起 - 修復 – BretC

0

一個簡單的辦法做到這一點會是這樣的:

List<Client> clients = new ArrayList<>(this.gym.getClients()); 
String[] clientArray = new String[clients.size()]; 
displayClientsList.setListData(clients.toArray(clientArray)); 

更新: 的JList得到作爲參數String數組,所以你需要給你的客戶名單首先轉換爲String陣列像這樣:

String[] clientAarray = clients.stream().map(c -> c.toString()).toArray(size -> new String[size]); 
displayClientsList.setListData(clientArray); 
+0

謝謝,但你的解決方案2行給我這個錯誤: Suspicious Collection.toArray()調用。收集項目類型gymcore.Client不能分配給數組組件類型java.lang.String 我想這是一個類似的問題:S – theopendle

+0

我已經更新了我的答案。 –

0

你爲什麼不從JList<String>JList<Client>改變displayClientsList,然後執行以下操作:

List<Client> clients = this.gym.getClients(); 
    displayClientsList.setListData(clients.toArray(new Client[clients.size()]));