gpt4 book ai didi

java - 在两个 JList 之间移动选定的数据

转载 作者:行者123 更新时间:2023-12-01 14:02:41 24 4
gpt4 key购买 nike

我正在尝试开发一个Java代码,它将在两个JList之间移动选定的数据,由于 getModel() 方法不会返回 DefaultListModel,并且 List.getModel() 方法也不允许显式转换,是否有其他可能的方法将选定的数据从一个 JList 移动到另一个 JList,反之亦然。?

这是我正在尝试的确切 View ...(“添加全部”和“删除全部”按钮运行良好,我正在使用 Arralist,但我正在寻找所选数据的解决方案,包括排序顺序添加和删​​除数据)

代码:

对于左 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。

感谢大家的关注。

最佳答案

您的解决方案应该非常简单,例如:

  1. 获取左侧列表中所有选定的项目
  2. 将左侧列表中的选定项目添加到右侧列表

毫无疑问,执行“添加全部”和“删除全部”应该非常简单。 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);
}

关于java - 在两个 JList 之间移动选定的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19223366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com