2013-11-20 163 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

我尝试这样做,,,但..error出现要求添加为进口它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

相关问题