2016-11-29 3 views
0

Я пытаюсь получить Jlist для отображения списка моих собственных объектов клиента. У моего класса Client есть метод 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 документы для этого метода говорит, что он принимает вектор или массив ...

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

Try ...

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 на String (не знаете, как вы его инициализировали ...) – 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)); 

Update: JList получает в качестве параметра String массива, так что вам нужно, во-первых конвертировать список клиентов в String массив как это:

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

Спасибо, но строка 2 вашего решения дает мне эту ошибку: Подозрительный вызов Collection.toArray(). Тип элемента коллекции gymcore.Client не назначается для типа массива java.lang.String Я думаю, это аналогичная проблема: S – theopendle

+0

Я обновил свой ответ. –

0

Почему вы не изменить displayClientsList от JList<String> к JList<Client>, а затем выполните следующие действия:

List<Client> clients = this.gym.getClients(); 
    displayClientsList.setListData(clients.toArray(new Client[clients.size()])); 
Смежные вопросы