我有一个问题,将项目从一个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);
}
非常感谢。
答案 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()
)。