2013-11-20 5 views
0

У меня проблема с копированием элементов из одного jlist в другой, я установил код прослушивателя кнопки, он работает, но не так, как я хочу. Когда я выбираю элемент, и я нажимаю кнопку, копия выбранного элемента будет находиться в jlist2Как скопировать элемент из jlist в другой?

Но проблема в том, что если я выберу тот же элемент и нажмите кнопку, элемент будет показан дважды, и это не будет ожидается.

Это код, пожалуйста, помогите как можно скорее.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 

{ 
    int[] selectedIx = jList1.getSelectedIndices(); 

    DefaultListModel lm = new DefaultListModel(); 
    ListModel list = jList2.getModel(); 

    for (int i = 0; i < list.getSize(); i++) { 
     Object prev = list.getElementAt(i); 
     lm.addElement(prev); 
    } 

    for (int i = 0; i < selectedIx.length; i++) { 
     Object sel = jList1.getModel().getElementAt(selectedIx[i]); 
     lm.addElement(sel); 
    } 

    jList2.setModel(lm); 

} 

спасибо большое.

ответ

1

Вы добавляете элементы дважды в DefaultListModel, что является причиной.

Object prev and Object sel 
+0

Я попытался использовать несколько способов .. но я застрял, и я не смог закончить – ASN

1

нравится этот

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)  
{ 
    List<String> selectedValuesList = jList1.getSelectedValuesList(); 
    jList2.setListData(selectedValuesList.toArray(new String[selectedValuesList.size()]));  
} 
+0

Я пытаюсь сделать это ,,, но он не работает .. появляется, появляется запрос Добавить импорт для java.swing.list .. когда я импортирую его, он говорит, что «java.swing.list Не принимает параметры» Я сдаюсь ... @. @ – ASN

+0

@ASN, пожалуйста, удалите java.swing.list и импортируйте этот java.util.List – Prabhakaran

+0

,, Извините за беспокойство. Фактически у меня есть (import javax.swing.JList;); но все же он не работает. Даже когда я удаляю его и импортирую (java.util.List) ... он показывает ошибку в первой строке в getSelectedValuesList(); Спасибо за вашу корпорацию. – ASN

1

Если я понял ваши намерения правильно, вы хотите скопировать элементы в jList2 при нажатии на кнопку, и избежать дубликатов, и держать предметы, которые были скопированы ранее. Предполагая, что jList2 использует DefaultListModel, вы можете проверить, если он уже содержит пункт:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    DefaultListModel list = (DefaultListModel) jList2.getModel(); 

    for (Object sel : jList1.getSelectedValues()) { 
     if (list.indexOf(sel) == -1) { 
      list.addElement(sel); 
     } 
    } 
} 

(используя достаточно недавнее Java, вы должны также использовать дженерики и getSelectedValuesList()).

+0

вы понимаете концепцию правильно .. но мне нужно заменить второй цикл на тот, который вы написали ??????? – ASN

+0

@ASN Я написал то, что я намеревался как полная реализация 'jButton1ActionPerformed()' (Удалены оба предыдущих цикла, повторно используют существующую модель и т. Д.). Обратите внимание, что я не пробовал, так что возможно, что ошибка переместилась. – kiheru

Смежные вопросы