java swing的drag and drop源程式 (轉)
import .awt.*;
import java.io.*;
import java.util.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.datatraner.*;
import javax..*;
import javax.swing.event.*;
import javax.swing.tree.*;
public class ListDemo extends JFrame
implements ListionListener
{
private DroppableList list;
private JTextField fileName;
public ListDemo()
{
super("ListDemo");
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.MalformedURLException e){
}
}
fileName = new JTextField(50);
String name = listModel.getElementAt(
list.getSelectedIndex()).toString();
fileName.setText(name);
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, DragListener, 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;
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 prov 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);
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1000238/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- drag &drop 拖拽事件事件
- drag & drop 拖拽事件事件
- Drag & Drop 拖拽詳解
- HTML5 : Drag & DropHTML
- HTML5 Drag和Drop 拖拽HTML
- dnd.js 拖放庫 Drag and DropJS
- HTML5 拖放(Drag和drop)HTML
- html 5 drag and drop upload fileHTML
- HTML5 drag & drop 拖拽與拖放HTML
- html-拖拽釋放(Drag and drop) APIHTMLAPI
- HTML5中 drag 和 drop apiHTMLAPI
- Blazor 使用拖放(drag and drop)上傳檔案Blazor
- 033Drag and Drop-TheBrain提示3DAI
- HTML5 Drag and Drop 的一些總結HTML
- 精讀《結合 React 使用原生 Drag Drop API》ReactAPI
- HTML5原生拖拽/拖放 Drag & Drop 詳解HTML
- 史上第二走心的 iOS11 Drag & Drop 教程iOS
- 基於HTML5的Drag and Drop生成圖片Base64資訊HTML
- java Swing程式設計入門Java程式設計
- Java SwingJava
- Java-GUI 程式設計之 SwingJavaGUI程式設計
- 利用File,Drop&Drag,XHR2實現圖片拖拽上傳
- Java-GUI程式設計之Swing元件JavaGUI程式設計元件
- Java學習之Swing Gui程式設計JavaGUI程式設計
- 使用Java Swing開發公章、私章圖片(已開源)Java
- drag拖拽程式碼例項
- java程式通過swing呼叫javaFx更新 資料Java
- Java開發中的執行緒安全選擇與Swing(轉)Java執行緒
- Java Swing坦克小遊戲Java遊戲
- Java Swing應用程式GUI視窗居中顯示JavaGUI
- Java圖形化:Swing表格的使用Java
- JAVA SWING/AWT/SWT DEVELOPER WANTEDJavaDeveloper
- Understanding Swing’s Model (轉)
- Swing入門基礎 (轉)
- Java的Swing應用中使用JavaFX的功能Java
- 好程式設計師Java教程解讀什麼是swing程式設計師Java
- Java Swing掃雷遊戲demo分享Java遊戲
- java swing實現的學生教師選課管理系統程式碼Java