2009-06-04 3 views

ответ

1

Вы также можете использовать setListData(Vector) метод:

jList1.setListData(new Vector<String>(map.keySet())); 

С каждым из setListData методов, вы делаете копию фактических данных, поэтому изменения в карте не будут отражены в списке. Вместо этого вы можете создать настраиваемый ListModel и передать его методу setModel, но поскольку нет способа получить доступ к произвольному элементу из LinkedHashMap по индексу, это, вероятно, невозможно.

0

Нашел этот способ, чтобы сделать это сразу после того, как я ответил на вопрос, подумал, что я поместил его здесь для сообщества. Я думаю, что это самый эффективный способ сделать это, но я, безусловно, открыт для большего количества предложений.

jList1.setListData(LinkedHashMap.keySet().toArray()); 
+0

Если вы не ожидаете обновления JList при добавлении чего-либо на карту, это будет работать. –

+1

Вы также можете использовать метод setListData (Vector): jList1.setListData (новый вектор (map.keySet())); –

+0

спасибо mmyers Я думаю, что я буду использовать этот путь вместо этого. –

1

Если JList не чувствителен к изменениям исходной карты, оригинальный метод, который вы использовали в порядке (лучше, чем с помощью Vector, который имеет дополнительный слой sychronization).

Если вы хотите, чтобы jList изменился при изменении карты, вам придется написать свой собственный ListModel (что не так сложно). Вам также придется выяснить, как узнать, когда карта изменится.

+0

Что вы подразумеваете под оригинальным методом: «лучше, чем использовать Vector?» Мне просто интересно. –

+0

Класс Vector имеет каждый метод синхронизации. Это добавляет небольшую стоимость для каждого вызова. Это не большая разница, но так как другая техника примерно такая же, я рекомендую ее по векторам. –