Java 在两个JList之间移动所选数据

Java 在两个JList之间移动所选数据,java,swing,jlist,Java,Swing,Jlist,我正在尝试开发一个Java代码,该代码将在两个JList之间移动选定的数据, 由于getModel()方法不会返回DefaultListModel,并且也不允许显式强制转换List.getModel()方法,是否有其他可能的方法将所选数据从一个JList移动到另一个JList,反之亦然 以下是我正在尝试的内容的确切视图…(“全部添加”和“全部删除”按钮工作正常,我使用Arralist进行此操作,但我正在为所选数据找到解决方案,包括添加和删除数据的顺序) 代码: 对于左JList“ 对于右侧列表

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

以下是我正在尝试的内容的确切视图…(“全部添加”和“全部删除”按钮工作正常,我使用Arralist进行此操作,但我正在为所选数据找到解决方案,包括添加和删除数据的顺序)

代码:

对于左JList“

对于右侧列表:

lmRight = new DefaultListModel();
lstRight = new javax.swing.JList();
lstRight.setModel(lmRight);
已解决:我将JList替换为JTable

注意:我们不能将DefaultListModel强制转换为getList(),因为它将返回AbstractListModel


谢谢大家的关注。

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

  • 从左侧列表中获取所有选定项
  • 将左列表中的选定项目添加到右列表
  • 毫无疑问,要做到“全部添加”和“全部删除”,应该非常简单

    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);
    }
    
    List myItemsForRightList=new ArrayList();
    int[]selectedIndex=jListLeft.getSelectedIndicies();
    for(int i=0;i
    我建议您也看看API提供了什么@

    ---编辑---
    只是因为没有提供完整的源代码,我在重新发布上面的代码时考虑到了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);
       }
    
    publicstaticvoidmain(字符串…参数){
    JFrame=新JFrame(“测试”);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    DefaultListModel DefaultListModel=新的DefaultListModel();
    defaultListModel.addElement(“Bla Bla Bla”);
    defaultListModel.addElement(“Ble”);
    defaultListModel.addElement(“Blo Blo Blo”);
    最终JList列表=新JList();
    list.setPreferredSize(新维度(400200));
    list.setModel(defaultListModel);
    JButton按钮=新JButton(“添加”);
    addActionListener(新建ActionListener()){
    @凌驾
    已执行的公共无效操作(操作事件e){
    ((DefaultListModel)list.getModel()).addElement(“添加新的”);
    }
    });
    frame.setLayout(新的BorderLayout(5,5));
    frame.add(新的JScrollPane(列表),BorderLayout.NORTH);
    框架。添加(按钮,边框布局。南);
    frame.pack();
    frame.setVisible(true);
    }
    
    您尝试了什么?您面临的问题是什么?为什么不尝试getModel()返回DefaultListModel,为什么不允许显式强制转换?这是因为您没有首先创建带有DefaultTableModel的JList。我不知道它与问题有什么关系。因为您似乎还没有准备好详细说明您的问题,我将投票关闭。不要添加图像。发布代码。cod有问题吗E你没有显示…考虑提供一个。这会使人们更容易地分析你的问题。Debug TistMod模型将抛出一个异常……我已经在我的问题中指定了。它不能因为Debug TListMype实现了ListMeod接口。测试并体验发生在你身上的事情。
    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);
       }