在两个JList之间移动选定的数据 [英] Moving selected data between two JList

查看:83
本文介绍了在两个JList之间移动选定的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to develop a Java code that will move selected data between two JList, As getModel() method will not return the DefaultListModel and explicit casting is also not allowed to List.getModel() method, is it any other possible way to move selected data from one to other JList and vice versa.?

这里是我正在尝试的确切视图...(全部添加"和全部删除"按钮运行良好,为此我使用Arralist,但我正在为所选数据找到解决方案,包括订购顺序添加和删​​除数据)

Here is the Exact view of what i am trying...("Add All" and "Remove all" buttons are working well, i am using Arralist for that, but i am finding solution for selected data, includig ordering sequence of adding and removing data)

代码:

对于左JList"

lmLeft = new DefaultListModel();
lstLeft = new javax.swing.JList();
lstLeft.setModel(lmLeft);

对于正确的JList:

For right JList:

lmRight = new DefaultListModel();
lstRight = new javax.swing.JList();
lstRight.setModel(lmRight);

已解决:我用JTable替换了JList

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

Note : We cannot cast DefaultListModel to getList() as it will return AbstractListModel.

谢谢大家的关注.

推荐答案

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

Your solution should be very straight forward like:

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

对于全部添加"和全部删除",所有这些都应该毫无疑问地非常简单. JList类为您提供了执行上述所有操作的方法.

And for doing Add All and Remove All those should be without question very simple. JList class gives you methods to perform all of the above.

JList.getSelectedIndices()将返回所有已选择索引的int(int [])数组.因此,您将遍历该列表并在这些索引处获取项目,然后将其添加到权限列表"中.

JList.getSelectedIndices() will return an array of int (int[]) of all indexes that have been selected. So you would go through the list and take the items at those indexes and add them to your Right List.

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必须提供的内容@

I suggest you also look at what the API has to offer @ http://docs.oracle.com/javase/6/docs/api/javax/swing/JList.html

-编辑---
只是因为没有提供完整的源代码,所以我谨记JDK 7重新发布了上面的代码

--- EDIT ---
Just because no complete source code was provided, I am re-posting the code above with JDK 7 in mind

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);
   }

这篇关于在两个JList之间移动选定的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆