黑马程序员技术交流社区
标题:
java 如何实现拖拽获取文件路径?
[打印本页]
作者:
First
时间:
2013-6-18 17:30
标题:
java 如何实现拖拽获取文件路径?
本帖最后由 Super_Class 于 2013-6-18 22:07 编辑
相信大家对视频播放器的文件拖拽非常熟悉,把文件的图标拖到播放器上就能播放视频了。
那么java 要怎样才能实现这样的拖拽功能呢??
作者:
changweihua
时间:
2013-6-18 21:08
public class TestDropTarget
{
final int DESKTOP_WIDTH = 480;
final int DESKTOP_HEIGHT = 360;
final int FRAME_DISTANCE = 30;
JFrame jf = new JFrame("测试拖放目标——把图片文件拖入该窗口");
//定义一个虚拟桌面
private JDesktopPane desktop = new JDesktopPane();
//保存下一个内部窗口的座标点
private int nextFrameX;
private int nextFrameY;
//定义内部窗口为虚拟桌面的1/2大小
private int width = DESKTOP_WIDTH / 2;
private int height = DESKTOP_HEIGHT / 2;
public void init()
{
desktop.setPreferredSize(new Dimension(DESKTOP_WIDTH, DESKTOP_HEIGHT));
//将当前窗口创建成拖放源
new DropTarget(jf, DnDConstants.ACTION_COPY , new ImageDropTargetListener());
jf.add(desktop);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.pack();
jf.setVisible(true);
}
class ImageDropTargetListener extends DropTargetAdapter
{
public void drop(DropTargetDropEvent event)
{
//接受复制操作
event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
//获取拖放的内容
Transferable transferable = event.getTransferable();
DataFlavor[] flavors = transferable.getTransferDataFlavors();
//遍历拖放内容里的所有数据格式
for (int i = 0; i < flavors.length; i++)
{
DataFlavor d = flavors[i];
try
{
//如果拖放内容的数据格式是文件列表
if (d.equals(DataFlavor.javaFileListFlavor))
{
//取出拖放操作里的文件列表
java.util.List fileList
= (java.util.List) transferable.getTransferData(d);
for (Object f : fileList)
{
//显示每个文件
showImage((File)f , event);
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
//强制拖放操作结束,停止阻塞拖放源
event.dropComplete(true);
}
}
//显示每个文件的工具方法
private void showImage(File f , DropTargetDropEvent event)throws java.io.IOException
{
Image image = ImageIO.read(f);
if (image == null)
{
//强制拖放操作结束,停止阻塞拖放源
event.dropComplete(true);
JOptionPane.showInternalMessageDialog(desktop , "系统不支持这种类型的文件");
//方法返回,不会继续操作
return;
}
ImageIcon icon = new ImageIcon(image);
//创建内部窗口显示该图片
JInternalFrame iframe = new JInternalFrame(f.getName()
,true , true , true , true);
JLabel imageLabel = new JLabel(icon);
iframe.add(new JScrollPane(imageLabel));
desktop.add(iframe);
//设置内部窗口的原始位置(内部窗口默认大小是0X0,放在0,0位置)
iframe.reshape(nextFrameX, nextFrameY, width, height);
//使该窗口可见,并尝试选中它
iframe.show();
//计算下一个内部窗口的位置
nextFrameX += FRAME_DISTANCE;
nextFrameY += FRAME_DISTANCE;
if (nextFrameX + width > desktop.getWidth()) nextFrameX = 0;
if (nextFrameY + height > desktop.getHeight()) nextFrameY = 0;
}
}
public static void main(String[] args)
{
new TestDropTarget().init();
}
}
复制代码
作者:
First
时间:
2013-6-18 21:57
用的是DropTargetAdapter啊,赞一个
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2