java實作拖曳範例
Swing中實作拖曳功能,程式碼很簡單,都有註釋,自己看,運作效果如下圖:
複製代碼代碼如下:
package com;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetAdapter;
import java.awt.dnd.DropTargetDropEvent;
import java.io.File;
import java.util.List;
import javax.swing.*;
/**
* 最簡單的Java拖曳程式碼範例
* @author 劉顯安
* 2013年1月24日
*/
public class DragTest extends JFrame
{
JPanel panel;//要接受拖曳的面板
public DragTest()
{
panel = new JPanel();
panel.setBackground(Color.YELLOW);
getContentPane().add(panel, BorderLayout.CENTER);
setSize(500, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(400, 200);
setTitle("最簡單的拖曳範例:拖曳文件到下面(20130124)");
drag();//啟用拖曳
}
public static void main(String[] args) throws Exception
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");//設定皮膚
new DragTest().setVisible(true);;
}
public void drag()//定義的拖曳方法
{
//panel表示要接受拖曳的控件
new DropTarget(panel, DnDConstants.ACTION_COPY_OR_MOVE, new DropTargetAdapter()
{
@Override
public void drop(DropTargetDropEvent dtde)//重寫適配器的drop方法
{
try
{
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor))//如果拖入的檔案格式受支持
{
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);//接收拖曳來的數據
List<File> list = (List<File>) (dtde.getTransferable().getTransferData(DataFlavor.javaFileListFlavor));
String temp="";
for(File file:list)
temp+=file.getAbsolutePath()+";/n";
JOptionPane.showMessageDialog(null, temp);
dtde.dropComplete(true);//指示拖曳操作已完成
}
else
{
dtde.rejectDrop();//否則拒絕拖曳來的數據
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
}