/*
* DndDemo.java
* source level: 1.4
*/
import java.awt.Color;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
public class DndDemo extends JFrame {
private final JTextArea textComp;
public DndDemo() {
super("DndDemo");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
textComp = new JTextArea();
textComp.setDragEnabled(true);
textComp.setEditable(false);
textComp.setBackground(new Color(255, 255, 204));
textComp.setTransferHandler(new FileTransferHandler(textComp));
getContentPane().add(new JScrollPane(textComp));
final JLabel label = new JLabel("<html><center><font size=5 color=green>" +
"Drop File<br><font size=2 color=gray>(click me to hide)");
label.setBounds(100, 80, 200, 100);
label.setOpaque(true);
label.setHorizontalAlignment(JLabel.CENTER);
textComp.addMouseListener(new MouseAdapter() {
public void mouseReleased(final MouseEvent e) {
label.setVisible(false);
}
});
getLayeredPane().add(label, JLayeredPane.POPUP_LAYER);
}
public static void main(final String[] args) {
Runnable gui = new Runnable() {
public void run() {
new DndDemo().setVisible(true);
}
};
//GUI must start on EventDispatchThread:
SwingUtilities.invokeLater(gui);
}
}
class FileTransferHandler extends TransferHandler {
private DataFlavor fileFlavor;
private JTextArea source;
FileTransferHandler(JTextArea source) {
this.source = source;
fileFlavor = DataFlavor.javaFileListFlavor;
}
public boolean importData(final JComponent c, final Transferable t) {
if (!canImport(c, t.getTransferDataFlavors())) {
return false;
}
if (hasFileFlavor(t.getTransferDataFlavors())) {
try {
List files = (List) t.getTransferData(fileFlavor);
for (int i = 0; i < files.size(); i++) {
source.append(((File) files.get(i)).getPath() + "\n");
}
return (true);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
return false;
}
public int getSourceActions(final JComponent c) {
return COPY;
}
public boolean canImport(final JComponent c, final DataFlavor[] flavors) {
if (hasFileFlavor(flavors)) {
return true;
}
return false;
}
private boolean hasFileFlavor(final DataFlavor[] flavors) {
for (int i = 0; i < flavors.length; i++) {
if (fileFlavor.equals(flavors[i])) {
return true;
}
}
return false;
}
}