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

标签 java swing jlist

我正在尝试开发一个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/

相关文章:

java - 使用 BufferStrategy 在 Java 中滑动图像

java - 我的 Boggle 程序找不到所有有效单词 - Java

java - 仅维护特定表的Realm数据迁移

java - 使用方法的最简单方法

java - JList - 使用垂直滚动条而不是垂直环绕方向的水平滚动条?

java - 为什么我的客户端不再接受输入

java - 如何更改此应用程序的 JLabel 中的文本?

java - 向应用程序中的所有 Swing 文本组件添加上下文菜单

java - 为什么会返回 "dataModel must be non null"错误?

Java JList remove() 方法抛出 ArrayOutOfBoundsException