我正在尝试开发一个Java代码,它将在两个JList之间移动所选数据, 由于getModel()方法不会返回DefaultListModel,并且也不允许显式转换为List.getModel()方法,是否可以将所选数据从一个JList移动到另一个JList,反之亦然。?
以下是我正在尝试的精确视图...(“全部添加”和“全部删除”按钮运行良好,我正在使用Arralist,但我找到所选数据的解决方案,包括订购顺序添加和删除数据)
代码:
For Left JList“
lmLeft = new DefaultListModel();
lstLeft = new javax.swing.JList();
lstLeft.setModel(lmLeft);
对于正确的JList:
lmRight = new DefaultListModel();
lstRight = new javax.swing.JList();
lstRight.setModel(lmRight);
已解决:我用JTable替换了JList
注意:我们无法将DefaultListModel强制转换为getList(),因为它将返回AbstractListModel。
谢谢大家的关注。
答案 0 :(得分:1)
您的解决方案应该非常直接,如:
对于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);
}