您的解决方案应该非常简单,例如:
- 从左侧列表中获取所有选定的项目
- 将左侧列表中的选定项目添加到右侧列表
而对于 Add All 和 Remove All 来说,这些应该毫无疑问非常简单。JList 类为您提供了执行上述所有操作的方法。
JList.getSelectedIndices() 将返回已选择的所有索引的 int (int[]) 数组。因此,您将浏览列表并获取这些索引处的项目并将它们添加到您的正确列表中。
List<Object> myItemsForRightList = new ArrayList<Object>();
int[] selectedIndexes = jListLeft.getSelectedIndicies();
for(int i=0; i < selectedIndexes.length; i++) {
Object whatever = jListLeft.getElementAt(selectedIndexes[i]);
((DefaultListModel)jListRight.getModel()).addElement(whatever);
}
我建议你也看看 API 必须提供什么@ http://docs.oracle.com/javase/6/docs/api/javax/swing/JList.html
--- 编辑 ---
仅仅因为没有提供完整的源代码,我重新发布上面的代码并考虑到 JDK 7
public static void main(String ... args) {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultListModel<String> defaultListModel = new DefaultListModel<String>();
defaultListModel.addElement("Bla bla bla");
defaultListModel.addElement("Ble ble ble");
defaultListModel.addElement("Blo blo blo");
final JList<String> list = new JList<String>();
list.setPreferredSize(new Dimension(400, 200));
list.setModel(defaultListModel);
JButton button = new JButton("Add");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
((DefaultListModel<String>)list.getModel()).addElement("New one added");
}
});
frame.setLayout(new BorderLayout(5, 5));
frame.add(new JScrollPane(list), BorderLayout.NORTH);
frame.add(button, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}