请教:java 程序里如何实现从一个列表中拖动一个元素到另一个列表中? java 程序里如何实现从一个列表中拖动一个元素到另一个列表中? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 想在java程序中实现从一个列表中选择,放入另一个列表中,不知道应该怎么实现,希望高手指点! 列表指的是什么?如果是select的话,js即可推荐http://blog.csdn.net/lihan6415151528/archive/2008/12/06/3459389.aspx Swing的吗?Java的DND就可以实现。主要就是 JList.setDragEabled(true); JList.setTransferHandler(new ListTransferHandler());//自定义一个Handler处理拖拽数据就可以了。两个List都要这么处理 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; }}以后能不能有点气节,能不能不要代码? 都给提供思路了还要代码?! 谢谢,我不是做java的,只是客串一下。现在来结贴,有点晚了,sorry。 能体现自己水平的代码 JAVA SE JTABLE 的行颜色 想把字符串中内容分割出来,制表符能作为分隔符吗? JAVA卜能用了?这种情况该怎么办? 我的csdn的bolg被停了! 请问Java编程原理与实践(第4版) 作者:Y.Daniel Liang 下列语句为什么出错!!! java中查询的数据库记录如何在JTable控件中显示? toString()的重载问题? 急! Int型转化成String型!在线等待! 菜鸟求助!关于java的输入 java数据库查询问题 求大神指点
如果是select的话,js即可
推荐http://blog.csdn.net/lihan6415151528/archive/2008/12/06/3459389.aspx
JList.setTransferHandler(new ListTransferHandler());//自定义一个Handler处理拖拽数据就可以了。两个List都要这么处理
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;
}
}
以后能不能有点气节,能不能不要代码? 都给提供思路了还要代码?!
现在来结贴,有点晚了,sorry。