高手请进 解决Java实现鼠标拖放文件功能! 本人想用Java实现 鼠标文件拖放功能(可以批量拖放哦)。如:将几个文件选择好然后一起拖放到组件(JList里),要求从该组件(如JList)就可以获取这个文件的信息,如读取各个文件的路径(当然进而就可以分别读取这个文件的内容了)。哪位高手知道,请指教!十分谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用Eclipse中SWT包里的dnd可轻松实现 import java.io.File;import org.eclipse.swt.SWT;import org.eclipse.swt.dnd.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;public class DragTree { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new FillLayout()); //创建一个树对象 final Tree tree = createFolderTree(shell); //定义拖放源对象 DragSource dragSource = new DragSource(tree, DND.DROP_MOVE|DND.DROP_COPY); //设置传输的数据为文本型String类型 dragSource.setTransfer(new Transfer[] { TextTransfer.getInstance()}); //注册拖放源时的事件处理 dragSource.addDragListener(new DragSourceListener() { public void dragStart(DragSourceEvent event) { if (tree.getSelectionCount() == 0) event.doit = false; } public void dragSetData(DragSourceEvent event) { if (TextTransfer.getInstance().isSupportedType(event.dataType)) { event.data = tree.getSelection()[0].getText(0); } } public void dragFinished(DragSourceEvent event) { } }); //定义拖放目标对象 DropTarget dropTarget = new DropTarget(tree, DND.DROP_MOVE | DND.DROP_DEFAULT|DND.DROP_COPY); //设置目标对象可传输的数据类型 dropTarget.setTransfer(new Transfer[] { TextTransfer.getInstance()}); //注册目标对象的事件处理 dropTarget.addDropListener(new DropTargetListener() { public void dragEnter(DropTargetEvent event) { if (event.detail == DND.DROP_DEFAULT) event.detail = DND.DROP_COPY; } public void dragOperationChanged(DropTargetEvent event) { if (event.detail == DND.DROP_DEFAULT) event.detail = DND.DROP_COPY; } public void dragOver(DropTargetEvent event) { event.feedback = DND.FEEDBACK_EXPAND | DND.FEEDBACK_SELECT; } //当松开鼠标时触发的事件 public void drop(DropTargetEvent event) { if (event.item == null) return; //首先获得目标对象中拖拽的树节点 TreeItem eventItem = (TreeItem) event.item; if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) { //获得数据源设置的字符串 String s = (String) event.data; //在当前位置插入一个节点 TreeItem newItem = null ; if (eventItem.getParentItem()==null) newItem = new TreeItem(eventItem.getParent(),SWT.NONE); else newItem = new TreeItem(eventItem.getParentItem(),SWT.NONE); newItem.setText(s); } } public void dragLeave(DropTargetEvent event) { } public void dropAccept(DropTargetEvent event) { } }); shell.setSize(300, 150); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } //创建树,利用目录结构来初始化树数据 public static Tree createFolderTree(Composite parent) { Tree tree = new Tree(parent, SWT.BORDER | SWT.SINGLE); File root = new File("F:\\Temp"); File[] files = root.listFiles(); for (int i = 0; i < files.length; i++) { TreeItem item = new TreeItem(tree, SWT.NONE); item.setText(files[i].getName()); if (files[i].isDirectory()) setDirectory(files[i], item); } return tree; } //设置子树的子孙数据,递归调用该方法 public static void setDirectory(File file, TreeItem parent) { File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { TreeItem item = new TreeItem(parent, SWT.NONE); item.setText(files[i].getName()); if (files[i].isDirectory()) setDirectory(files[i], item); } }} 兄弟,对不起,我用Swing实现,谢谢2楼。结贴时,还是会给你加分的。 这个算浅复制还是深复制 try语句的问题 怎样检测代码的运行时间? java中在什么时候可以设置线程优先级? 大哥们,帮我看一下程序代码的意思 问下关于反射的问题 error 1335 求助 如何在文件中间插入修改一些数据,又不会覆盖后面的数据? 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务? 请问两个简单问题? awt 数组产生的原因是什么,数组使用中应注意的问题是什么?
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class DragTree { public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
//创建一个树对象
final Tree tree = createFolderTree(shell);
//定义拖放源对象
DragSource dragSource = new DragSource(tree, DND.DROP_MOVE|DND.DROP_COPY);
//设置传输的数据为文本型String类型
dragSource.setTransfer(new Transfer[] { TextTransfer.getInstance()});
//注册拖放源时的事件处理
dragSource.addDragListener(new DragSourceListener() {
public void dragStart(DragSourceEvent event) {
if (tree.getSelectionCount() == 0)
event.doit = false;
}
public void dragSetData(DragSourceEvent event) {
if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
event.data = tree.getSelection()[0].getText(0);
}
}
public void dragFinished(DragSourceEvent event) {
}
});
//定义拖放目标对象
DropTarget dropTarget = new DropTarget(tree, DND.DROP_MOVE | DND.DROP_DEFAULT|DND.DROP_COPY);
//设置目标对象可传输的数据类型
dropTarget.setTransfer(new Transfer[] { TextTransfer.getInstance()});
//注册目标对象的事件处理
dropTarget.addDropListener(new DropTargetListener() {
public void dragEnter(DropTargetEvent event) {
if (event.detail == DND.DROP_DEFAULT)
event.detail = DND.DROP_COPY;
}
public void dragOperationChanged(DropTargetEvent event) {
if (event.detail == DND.DROP_DEFAULT)
event.detail = DND.DROP_COPY;
}
public void dragOver(DropTargetEvent event) {
event.feedback = DND.FEEDBACK_EXPAND | DND.FEEDBACK_SELECT;
}
//当松开鼠标时触发的事件
public void drop(DropTargetEvent event) {
if (event.item == null)
return;
//首先获得目标对象中拖拽的树节点
TreeItem eventItem = (TreeItem) event.item;
if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) {
//获得数据源设置的字符串
String s = (String) event.data;
//在当前位置插入一个节点
TreeItem newItem = null ;
if (eventItem.getParentItem()==null)
newItem = new TreeItem(eventItem.getParent(),SWT.NONE);
else
newItem = new TreeItem(eventItem.getParentItem(),SWT.NONE);
newItem.setText(s);
}
} public void dragLeave(DropTargetEvent event) {
}
public void dropAccept(DropTargetEvent event) {
} });
shell.setSize(300, 150);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
//创建树,利用目录结构来初始化树数据
public static Tree createFolderTree(Composite parent) {
Tree tree = new Tree(parent, SWT.BORDER | SWT.SINGLE);
File root = new File("F:\\Temp");
File[] files = root.listFiles();
for (int i = 0; i < files.length; i++) {
TreeItem item = new TreeItem(tree, SWT.NONE);
item.setText(files[i].getName());
if (files[i].isDirectory())
setDirectory(files[i], item);
}
return tree; }
//设置子树的子孙数据,递归调用该方法
public static void setDirectory(File file, TreeItem parent) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
TreeItem item = new TreeItem(parent, SWT.NONE);
item.setText(files[i].getName());
if (files[i].isDirectory())
setDirectory(files[i], item);
}
}
}