java 程序里如何实现从一个列表中拖动一个元素到另一个列表中?

解决方案 »

  1.   

    想在java程序中实现从一个列表中选择,放入另一个列表中,不知道应该怎么实现,希望高手指点!
      

  2.   

    列表指的是什么?
    如果是select的话,js即可
    推荐http://blog.csdn.net/lihan6415151528/archive/2008/12/06/3459389.aspx
      

  3.   

    Swing的吗?Java的DND就可以实现。主要就是 JList.setDragEabled(true);
            JList.setTransferHandler(new ListTransferHandler());//自定义一个Handler处理拖拽数据就可以了。两个List都要这么处理
      

  4.   

    package DndDemoList2List;import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.StringSelection;
    import java.awt.datatransfer.Transferable;
    import java.awt.datatransfer.UnsupportedFlavorException;
    import java.io.IOException;import javax.swing.BorderFactory;
    import javax.swing.DefaultListModel;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.ListSelectionModel;
    import javax.swing.TransferHandler;public class DnDDemoList2List extends JFrame { public DnDDemoList2List() {
    getContentPane().setLayout(new GridLayout(2, 1));
    getContentPane().add(createList());
    getContentPane().add(createList());
    } private JPanel createList() {
    DefaultListModel listModel = new DefaultListModel();
    listModel.addElement("List 0");
    listModel.addElement("List 1");
    listModel.addElement("List 2");
    listModel.addElement("List 3");
    listModel.addElement("List 4");
    listModel.addElement("List 5");
    listModel.addElement("List 6");
    listModel.addElement("List 7");
    listModel.addElement("List 8"); JList list = new JList(listModel);
    list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    JScrollPane scrollPane = new JScrollPane(list);
    scrollPane.setPreferredSize(new Dimension(400, 100)); list.setDragEnabled(true);
    list.setTransferHandler(new ListTransferHandler()); JPanel panel = new JPanel(new BorderLayout());
    panel.add(scrollPane, BorderLayout.CENTER);
    panel.setBorder(BorderFactory.createTitledBorder("List"));
    return panel;
    } public static void main(String[] args) { DnDDemoList2List frame = new DnDDemoList2List();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack();
    frame.setVisible(true);
    }
    }class ListTransferHandler extends TransferHandler {
    private int[] indices = null;
    private int addIndex = -1;
    private int addCount = 0; protected String exportString(JComponent c) {
    JList list = (JList) c;
    indices = list.getSelectedIndices();
    Object[] values = list.getSelectedValues(); StringBuffer buff = new StringBuffer(); for (int i = 0; i < values.length; i++) {
    Object val = values[i];
    buff.append(val == null ? "" : val.toString());
    if (i != values.length - 1) {
    buff.append("\n");
    }
    } return buff.toString();
    } protected void importString(JComponent c, String str) {
    JList target = (JList) c;
    DefaultListModel listModel = (DefaultListModel) target.getModel();
    int index = target.getSelectedIndex(); if (indices != null && index >= indices[0] - 1
    && index <= indices[indices.length - 1]) {
    indices = null;
    return;
    } int max = listModel.getSize();
    if (index < 0) {
    index = max;
    } else {
    index++;
    if (index > max) {
    index = max;
    }
    }
    addIndex = index;
    String[] values = str.split("\n");
    addCount = values.length;
    for (int i = 0; i < values.length; i++) {
    listModel.add(index++, values[i]);
    }
    } protected void cleanup(JComponent c, boolean remove) {
    if (remove && indices != null) {
    JList source = (JList) c;
    DefaultListModel model = (DefaultListModel) source.getModel();
    if (addCount > 0) {
    for (int i = 0; i < indices.length; i++) {
    if (indices[i] > addIndex) {
    indices[i] += addCount;
    }
    }
    }
    for (int i = indices.length - 1; i >= 0; i--) {
    model.remove(indices[i]);
    }
    }
    indices = null;
    addCount = 0;
    addIndex = -1;
    } protected Transferable createTransferable(JComponent c) {
    return new StringSelection(exportString(c));
    } public int getSourceActions(JComponent c) {
    return COPY_OR_MOVE;
    } public boolean importData(JComponent c, Transferable t) {
    if (canImport(c, t.getTransferDataFlavors())) {
    try {
    String str = (String) t
    .getTransferData(DataFlavor.stringFlavor);
    importString(c, str);
    return true;
    } catch (UnsupportedFlavorException ufe) {
    } catch (IOException ioe) {
    }
    } return false;
    } protected void exportDone(JComponent c, Transferable data, int action) {
    cleanup(c, action == MOVE);
    } public boolean canImport(JComponent c, DataFlavor[] flavors) {
    for (int i = 0; i < flavors.length; i++) {
    if (DataFlavor.stringFlavor.equals(flavors[i])) {
    return true;
    }
    }
    return false;
    }
    }
    以后能不能有点气节,能不能不要代码? 都给提供思路了还要代码?!
      

  5.   

    谢谢,我不是做java的,只是客串一下。
    现在来结贴,有点晚了,sorry。