2016-11-29 3 views
0

Ich versuche, eine Jlist zu erhalten, um eine Liste meiner eigenen Client-Objekte anzuzeigen. Meine Client-Klasse hat eine toString() -Methode, die gut mit System.out.print() funktioniert, und ich bin mir nicht sicher, wo sonst mein Problem liegen könnte.Wie bekomme ich JList um ArrayList anzuzeigen?

Hier ist mein Code:

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

ist die Fehlermeldung:

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

Kann mir jemand sagen, wie dieses Problem beheben? Thanks :)

+0

Sie können den Client nicht so einfach in eine Zeichenkette konvertieren – XtremeBaumer

Antwort

1

Die API-Dokumente für diese Methode sagt, dass es einen Vektor, oder ein Array nimmt ...

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

Versuchen ...

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

Oder möchten Sie vielleicht um eine Liste von Strings selbst zu erstellen und diese anzuzeigen, zum Beispiel ...

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

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

Möglicherweise müssen Sie den generischen Typ der JList in String ändern (nicht sicher, wie Sie ihn initialisiert haben ...) – BretC

+0

Ihr zweites Beispiel hat das gleiche Problem wie der Code in der Frage: Sie Eine einfache Liste kann nicht an die setListData-Methode übergeben werden. Sie müssten es in '.collect (Collectors.toCollection (Vector :: new))' ändern und den Typ der displayList in 'Vector ' ändern. – VGR

+0

@VGR Hoppla, tut mir leid - beheben – BretC

0

Ein einfaches Art und Weise, dies zu tun würde so aussehen:

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

Update: Der JList wird als Parameter ein String Array, so müssen Sie zunächst Ihre Kunden-Liste auf eine wie diese String Array konvertieren:

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

Danke, aber die Zeile 2 Ihrer Lösung gibt mir diesen Fehler: Suspicious Collection.toArray() Anruf. Sammlungselementtyp gymcore.Client kann Array-Komponententyp nicht zugewiesen werden java.lang.String Ich denke, das ist ein ähnliches Problem: S – theopendle

+0

Ich habe meine Antwort aktualisiert. –

0

Warum nicht displayClientsList von einem JList<String> zu einem JList<Client> ändern und dann wie folgt vorgehen:

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