各位老大,如何实现从java程序以外拖拽一个文件进入java程序的窗口,并得到文件的信息? 帮你UP~~~~~~~------------------------------------体验速度,体验CSDN新版论坛助手:http://community.csdn.net/Expert/TopicView.asp?id=3108679 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考java.awt.dnd包,Drag And Drop记不太清了,大致的做法是将你的JComponent,比如JTextArea变成一个可接受Drag&Drop的对象,并添加Drag&Drop事件的Listener,这个event包含了你在操作中所拖拽的内容的信息(文件,字符串....),接下来你应该会了吧 就是这个java.awt.dnd包,具体的请参考JAVA API。 谢谢楼上的各位高手,我参考了一下java2图形设计卷1里面介绍的拖拽,可以实现JCompnent内部的拖拽,如String的拖拽,但是程序外的文件怎么拖拽我还是没弄明白,拖拽的实现不是需要先设置拖动源吗,java程序外部的文件如何能成为拖动源呢,我的程序是要实现一个窗口,随意从某个文件夹内拖动一个文件到这个窗口,窗口能显示出文件的文件名,大小,创建日期等属性,高手们再给我指点一下吧 这个要用到windows api,不容易啊。 this is a sample for you good luck/** * @version 1.00 1999-09-11 * @author Cay Horstmann */import java.awt.*;import java.awt.datatransfer.*;import java.awt.event.*;import java.awt.dnd.*;import java.io.*;import java.util.*;import javax.swing.*;public class DropTargetTest{ public static void main(String[] args) { JFrame frame = new DropTargetFrame(); frame.show(); }}class DropTargetFrame extends JFrame{ public DropTargetFrame() { setTitle("DropTarget"); setSize(300, 300); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); Container contentPane = getContentPane(); JTextArea textArea = new JTextArea("Drop items into this text area.\n"); new DropTarget(textArea, new TextDropTargetListener(textArea)); contentPane.add(new JScrollPane(textArea), "Center"); }}class TextDropTargetListener implements DropTargetListener{ public TextDropTargetListener(JTextArea ta) { textArea = ta; } public void dragEnter(DropTargetDragEvent event) { int a = event.getDropAction(); if ((a & DnDConstants.ACTION_COPY) != 0) textArea.append("ACTION_COPY\n"); if ((a & DnDConstants.ACTION_MOVE) != 0) textArea.append("ACTION_MOVE\n"); if ((a & DnDConstants.ACTION_LINK) != 0) textArea.append("ACTION_LINK\n"); if (!isDragAcceptable(event)) { event.rejectDrag(); return; } } public void dragExit(DropTargetEvent event) { } public void dragOver(DropTargetDragEvent event) { // you can provide visual feedback here } public void dropActionChanged(DropTargetDragEvent event) { if (!isDragAcceptable(event)) { event.rejectDrag(); return; } } public void drop(DropTargetDropEvent event) { if (!isDropAcceptable(event)) { event.rejectDrop(); return; } event.acceptDrop(DnDConstants.ACTION_COPY); Transferable transferable = event.getTransferable(); DataFlavor[] flavors = transferable.getTransferDataFlavors(); for (int i = 0; i < flavors.length; i++) { DataFlavor d = flavors[i]; textArea.append("MIME type=" + d.getMimeType() + "\n"); try { if (d.equals(DataFlavor.javaFileListFlavor)) { java.util.List fileList = (java.util.List) transferable.getTransferData(d); Iterator iterator = fileList.iterator(); while (iterator.hasNext()) { File f = (File)iterator.next(); textArea.append(f + "\n"); } } else if (d.equals(DataFlavor.stringFlavor)) { String s = (String) transferable.getTransferData(d); textArea.append(s + "\n"); } else if (d.isMimeTypeEqual("text/plain")) { String charset = d.getParameter("charset"); InputStream in = (InputStream) transferable.getTransferData(d); boolean more = true; int ch; if (charset.equals("ascii")) { do { ch = in.read(); if (ch != 0 && ch != -1) textArea.append("" + (char)ch); else more = false; } while (more); } else if (charset.equals("unicode")) { boolean littleEndian = true; // if no byte ordering , we assume // Windows is the culprit do { ch = in.read(); int ch2 = in.read(); if (ch != -1 && littleEndian) ch = (ch & 0xFF) | ((ch2 & 0xFF) << 8); if (ch == 0xFFFE) littleEndian = false; else if (ch != 0 && ch != -1) textArea.append("" + (char)ch); else more = false; } while (more); } textArea.append("\n"); } } catch(Exception e) { textArea.append("Error: " + e + "\n"); } } event.dropComplete(true); } public boolean isDragAcceptable(DropTargetDragEvent event) { // usually, you check the available data flavors here // in this program, we accept all flavors return (event.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0; } public boolean isDropAcceptable(DropTargetDropEvent event) { // usually, you check the available data flavors here // in this program, we accept all flavors return (event.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0; } private JTextArea textArea;} 用windows api可以吗,但是这个项目还要移植到苹果上,需要用纯java来实现啊 无法将类中的构造器应用给给定类 如何统计线程中某一段代码的运行时间呢 数据库权限的问题 java 线程中的run方法中有close: 是什么意思 怎么理解jquery中这段代码? 怎么样把一个文件读成byte[]数组呀? request.getParameterMap()的问题?entry.getValue()取值疑问 出学者的问题! 我本来做一个很小的程序给大家玩的,测试你的鼠标点击速度,但编译时碰到了下面问题,望各位大侠解答 请问各位JAVA高手,java 可以动态定义数组吗,或有类似VB中的collection这样的数据类型??? 如何取windows2000中的系统环境变量? 如何把
Drag And Drop记不太清了,
大致的做法是将你的JComponent,比如JTextArea变成一个可接受Drag&Drop的对象,并添加Drag&Drop事件的Listener,这个event包含了你在操作中所拖拽的内容的信息(文件,字符串....),接下来你应该会了吧
* @version 1.00 1999-09-11
* @author Cay Horstmann
*/import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.io.*;
import java.util.*;
import javax.swing.*;public class DropTargetTest
{ public static void main(String[] args)
{ JFrame frame = new DropTargetFrame();
frame.show();
}
}class DropTargetFrame extends JFrame
{ public DropTargetFrame()
{ setTitle("DropTarget");
setSize(300, 300);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} ); Container contentPane = getContentPane();
JTextArea textArea
= new JTextArea("Drop items into this text area.\n"); new DropTarget(textArea,
new TextDropTargetListener(textArea));
contentPane.add(new JScrollPane(textArea), "Center");
}
}
class TextDropTargetListener implements DropTargetListener
{ public TextDropTargetListener(JTextArea ta)
{ textArea = ta;
} public void dragEnter(DropTargetDragEvent event)
{ int a = event.getDropAction();
if ((a & DnDConstants.ACTION_COPY) != 0)
textArea.append("ACTION_COPY\n");
if ((a & DnDConstants.ACTION_MOVE) != 0)
textArea.append("ACTION_MOVE\n");
if ((a & DnDConstants.ACTION_LINK) != 0)
textArea.append("ACTION_LINK\n"); if (!isDragAcceptable(event))
{ event.rejectDrag();
return;
}
} public void dragExit(DropTargetEvent event)
{
} public void dragOver(DropTargetDragEvent event)
{ // you can provide visual feedback here
} public void dropActionChanged(DropTargetDragEvent event)
{ if (!isDragAcceptable(event))
{ event.rejectDrag();
return;
}
} public void drop(DropTargetDropEvent event)
{ if (!isDropAcceptable(event))
{ event.rejectDrop();
return;
} event.acceptDrop(DnDConstants.ACTION_COPY); Transferable transferable = event.getTransferable(); DataFlavor[] flavors
= transferable.getTransferDataFlavors();
for (int i = 0; i < flavors.length; i++)
{ DataFlavor d = flavors[i];
textArea.append("MIME type=" + d.getMimeType() + "\n"); try
{ if (d.equals(DataFlavor.javaFileListFlavor))
{ java.util.List fileList = (java.util.List)
transferable.getTransferData(d);
Iterator iterator = fileList.iterator();
while (iterator.hasNext())
{ File f = (File)iterator.next();
textArea.append(f + "\n");
}
}
else if (d.equals(DataFlavor.stringFlavor))
{ String s = (String)
transferable.getTransferData(d);
textArea.append(s + "\n");
}
else if (d.isMimeTypeEqual("text/plain"))
{ String charset = d.getParameter("charset");
InputStream in = (InputStream)
transferable.getTransferData(d); boolean more = true;
int ch;
if (charset.equals("ascii"))
{ do
{ ch = in.read();
if (ch != 0 && ch != -1)
textArea.append("" + (char)ch);
else more = false;
} while (more);
}
else if (charset.equals("unicode"))
{ boolean littleEndian = true;
// if no byte ordering , we assume
// Windows is the culprit
do
{ ch = in.read();
int ch2 = in.read();
if (ch != -1 && littleEndian)
ch = (ch & 0xFF) | ((ch2 & 0xFF) << 8);
if (ch == 0xFFFE)
littleEndian = false;
else if (ch != 0 && ch != -1)
textArea.append("" + (char)ch);
else more = false;
} while (more);
} textArea.append("\n");
}
}
catch(Exception e)
{ textArea.append("Error: " + e + "\n");
}
}
event.dropComplete(true);
} public boolean isDragAcceptable(DropTargetDragEvent event)
{ // usually, you check the available data flavors here
// in this program, we accept all flavors
return (event.getDropAction()
& DnDConstants.ACTION_COPY_OR_MOVE) != 0;
} public boolean isDropAcceptable(DropTargetDropEvent event)
{ // usually, you check the available data flavors here
// in this program, we accept all flavors
return (event.getDropAction()
& DnDConstants.ACTION_COPY_OR_MOVE) != 0;
} private JTextArea textArea;
}