分享
 
 
 

java swing的drag and drop源程序

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

import java.awt.*;

import java.io.*;

import java.util.*;

import java.awt.event.*;

import java.awt.dnd.*;

import java.awt.datatransfer.*;

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.tree.*;

public class ListDemo extends JFrame

implements ListSelectionListener

{

private DroppableList list;

private JTextField fileName;

public ListDemo()

{

super("ListDemo");

//Create the list and put it in a scroll pane

list = new DroppableList();

DefaultListModel listModel = (DefaultListModel)list.getModel();

list.setCellRenderer(new CustomCellRenderer());

list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

list.setSelectedIndex(0);

list.addListSelectionListener(this);

JScrollPane listScrollPane = new JScrollPane(list);

String dirName = new String("\\");

String filelist[] = new File(dirName).list();

for (int i=0; i < filelist.length ; i++ )

{

String thisFileSt = dirName+filelist[i];

File thisFile = new File(thisFileSt);

if (thisFile.isDirectory())

continue;

try {

listModel.addElement(makeNode(thisFile.getName(),

thisFile.toURL().toString(),

thisFile.getAbsolutePath()));

} catch (java.net.MalformedURLException e){

}

}

fileName = new JTextField(50);

String name = listModel.getElementAt(

list.getSelectedIndex()).toString();

fileName.setText(name);

file://Create a panel that uses FlowLayout (the default).

JPanel buttonPane = new JPanel();

buttonPane.add(fileName);

Container contentPane = getContentPane();

contentPane.add(listScrollPane, BorderLayout.CENTER);

contentPane.add(buttonPane, BorderLayout.NORTH);

}

public void valueChanged(ListSelectionEvent e)

{

if (e.getValueIsAdjusting() == false)

{

fileName.setText("");

if (list.getSelectedIndex() != -1)

{

String name = list.getSelectedValue().toString();

fileName.setText(name);

}

}

}

private static Hashtable makeNode(String name,

String url, String strPath)

{

Hashtable hashtable = new Hashtable();

hashtable.put("name", name);

hashtable.put("url", url);

hashtable.put("path", strPath);

return hashtable;

}

public class DroppableList extends JList

implements DropTargetListener, DragSourceListener, DragGestureListener

{

DropTarget dropTarget = new DropTarget (this, this);

DragSource dragSource = DragSource.getDefaultDragSource();

public DroppableList()

{

dragSource.createDefaultDragGestureRecognizer(

this, DnDConstants.ACTION_COPY_OR_MOVE, this);

setModel(new DefaultListModel());

}

public void dragDropEnd(DragSourceDropEvent DragSourceDropEvent){}

public void dragEnter(DragSourceDragEvent DragSourceDragEvent){}

public void dragExit(DragSourceEvent DragSourceEvent){}

public void dragOver(DragSourceDragEvent DragSourceDragEvent){}

public void dropActionChanged(DragSourceDragEvent DragSourceDragEvent){}

public void dragEnter (DropTargetDragEvent dropTargetDragEvent)

{

dropTargetDragEvent.acceptDrag (DnDConstants.ACTION_COPY_OR_MOVE);

}

public void dragExit (DropTargetEvent dropTargetEvent) {}

public void dragOver (DropTargetDragEvent dropTargetDragEvent) {}

public void dropActionChanged (DropTargetDragEvent dropTargetDragEvent){}

public synchronized void drop (DropTargetDropEvent dropTargetDropEvent)

{

try

{

Transferable tr = dropTargetDropEvent.getTransferable();

if (tr.isDataFlavorSupported (DataFlavor.javaFileListFlavor))

{

dropTargetDropEvent.acceptDrop (

DnDConstants.ACTION_COPY_OR_MOVE);

java.util.List fileList = (java.util.List)

tr.getTransferData(DataFlavor.javaFileListFlavor);

Iterator iterator = fileList.iterator();

while (iterator.hasNext())

{

File file = (File)iterator.next();

Hashtable hashtable = new Hashtable();

hashtable.put("name",file.getName());

hashtable.put("url",file.toURL().toString());

hashtable.put("path",file.getAbsolutePath());

((DefaultListModel)getModel()).addElement(hashtable);

}

dropTargetDropEvent.getDropTargetContext().dropComplete(true);

} else {

System.err.println ("Rejected");

dropTargetDropEvent.rejectDrop();

}

} catch (IOException io) {

io.printStackTrace();

dropTargetDropEvent.rejectDrop();

} catch (UnsupportedFlavorException ufe) {

ufe.printStackTrace();

dropTargetDropEvent.rejectDrop();

}

}

public void dragGestureRecognized(DragGestureEvent dragGestureEvent)

{

if (getSelectedIndex() == -1)

return;

Object obj = getSelectedValue();

if (obj == null) {

// Nothing selected, nothing to drag

System.out.println ("Nothing selected - beep");

getToolkit().beep();

} else {

Hashtable table = (Hashtable)obj;

FileSelection transferable =

new FileSelection(new File((String)table.get("path")));

dragGestureEvent.startDrag(

DragSource.DefaultCopyDrop,

transferable,

this);

}

}

}

public class CustomCellRenderer implements ListCellRenderer

{

DefaultListCellRenderer listCellRenderer =

new DefaultListCellRenderer();

public Component getListCellRendererComponent(

JList list, Object value, int index,

boolean selected, boolean hasFocus)

{

listCellRenderer.getListCellRendererComponent(

list, value, index, selected, hasFocus);

listCellRenderer.setText(getValueString(value));

return listCellRenderer;

}

private String getValueString(Object value)

{

String returnString = "null";

if (value != null) {

if (value instanceof Hashtable) {

Hashtable h = (Hashtable)value;

String name = (String)h.get("name");

String url = (String)h.get("url");

returnString = name + " ==> " + url;

} else {

returnString = "X: " + value.toString();

}

}

return returnString;

}

}

public class FileSelection extends Vector implements Transferable

{

final static int FILE = 0;

final static int STRING = 1;

final static int PLAIN = 2;

DataFlavor flavors[] = {DataFlavor.javaFileListFlavor,

DataFlavor.stringFlavor,

DataFlavor.plainTextFlavor};

public FileSelection(File file)

{

addElement(file);

}

/* Returns the array of flavors in which it can provide the data. */

public synchronized DataFlavor[] getTransferDataFlavors() {

return flavors;

}

/* Returns whether the requested flavor is supported by this object. */

public boolean isDataFlavorSupported(DataFlavor flavor) {

boolean b = false;

b |=flavor.equals(flavors[FILE]);

b |= flavor.equals(flavors[STRING]);

b |= flavor.equals(flavors[PLAIN]);

return (b);

}

/**

* If the data was requested in the "java.lang.String" flavor,

* return the String representing the selection.

*/

public synchronized Object getTransferData(DataFlavor flavor)

throws UnsupportedFlavorException, IOException {

if (flavor.equals(flavors[FILE])) {

return this;

} else if (flavor.equals(flavors[PLAIN])) {

return new StringReader(((File)elementAt(0)).getAbsolutePath());

} else if (flavor.equals(flavors[STRING])) {

return((File)elementAt(0)).getAbsolutePath();

} else {

throw new UnsupportedFlavorException(flavor);

}

}

}

public static void main(String s[])

{

JFrame frame = new ListDemo();

frame.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

frame.pack();

frame.setVisible(true);

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有