如何将项目从jlist复制到另一个?

时间:2013-11-20 15:02:36

标签: java swing

我有一个问题,将项目从一个jlist复制到另一个,我设置了一个按钮动作监听器代码,它工作,但不是我想要的。当我选择一个项目并按下按钮时, 所选项目的副本将在jlist2

但问题是,如果我选择相同的项目并单击按钮,该项目将显示两次,这是不可取的。

这是代码,请尽快帮助。

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

} 

非常感谢。

3 个答案:

答案 0 :(得分:1)

您要将元素两次添加到DefaultListModel中,这是原因。

Object prev  and Object sel   

答案 1 :(得分:1)

喜欢这个

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

答案 2 :(得分: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())。