/*
* FileDrop.java
*/
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseEvent;
import javax.swing.table.DefaultTableModel;
public class FileDrop extends JPanel {
private FileTransferHandler transferHandler;
static JTable table;
static DefaultTableModel model;
static int rowTo,rowFrom;
public FileDrop() {
JPanel dataPanel = new JPanel();
dataPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
model = new DefaultTableModel(new String[]{"Titel"}, 0); //Name der Spalten vergeben und anzahl der Reihen festlegen
table = new JTable(model);
table.setDragEnabled(true);
table.setAutoCreateRowSorter(true);
table.setFillsViewportHeight(true);
transferHandler = new FileTransferHandler(table);
table.setTransferHandler(transferHandler);
dataPanel.add(new JScrollPane(table));
add(dataPanel, BorderLayout.CENTER);
table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
private static void enableRowDragging() {
table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent evt) {
rowTo = table.convertRowIndexToModel(table.rowAtPoint(evt.getPoint()));
if (rowTo != rowFrom && rowTo > -1 && rowTo < model.getRowCount()) {
model.moveRow(rowFrom, rowFrom, rowTo);
rowFrom = rowTo;
}
}
});
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent evt) {
rowFrom = table.convertRowIndexToModel(table.rowAtPoint(evt.getPoint()));
}
});
}
public static void main(final String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() //grafische Oberfläche erstellen
{
JFrame frame = new JFrame("File Drop");
frame.setBounds(100, 100, 500, 540);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//Create and set up the content pane.
FileDrop fViewer = new FileDrop();
frame.setContentPane(fViewer);
//Display the window.
frame.setVisible(true);
JButton but=new JButton();
but.setBounds(10, 10, 60, 40);
but.setText("Entfernen");
ActionListener del = new ActionListener() {
public void actionPerformed( ActionEvent e ) {
model.removeRow(table.getSelectedRow());
}
};
but.addActionListener(del);
but.setVisible(true);
frame.add(but);
enableRowDragging();
}
class FileTransferHandler extends TransferHandler {
private DataFlavor fileFlavor;
private JTable table;
private JFrame frame;
private List<String> supportedFormats = new ArrayList<String>();
{
supportedFormats.add(".mp3");
supportedFormats.add(".midi");
supportedFormats.add(".mid");
supportedFormats.add(".wav");
}
FileTransferHandler(final JTable list) {
this.table = list;
fileFlavor = DataFlavor.javaFileListFlavor;
}
@Override
public boolean importData(final JComponent c, final Transferable t) {
if (!canImport(c, t.getTransferDataFlavors())) {
return false;
}
try {
if (hasFileFlavor(t.getTransferDataFlavors())) {
final List files = (List) t.getTransferData(fileFlavor);
final DefaultTableModel model = (DefaultTableModel) table.getModel();
for (int i = 0; i < files.size(); i++) {
final File file = (File) files.get(i);
String name = file.getName();
if (supportedFormats.contains(name.toLowerCase().substring(name.indexOf(".")))) {
model.addRow(new String[]{name, name.substring(name.indexOf(".") + 1), "1"});
}
else
{
JOptionPane.showMessageDialog(frame,"Die Datei hat ein nicht unterstütztes File Format!",name,JOptionPane.ERROR_MESSAGE);
}
}
return true;
}
} catch (final UnsupportedFlavorException ufe) {
System.out.println("importData: unsupported data flavor");
} catch (final IOException ioe) {
System.out.println("importData: I/O exception");
}
return false;
}
@Override
public boolean canImport(final JComponent c, final DataFlavor[] flavors) {
return hasFileFlavor(flavors);
}
private boolean hasFileFlavor(final DataFlavor[] flavors) {
for (int i = 0; i < flavors.length; i++) {
if (fileFlavor.equals(flavors[i])) {
return true;
}
}
return false;
}
}
}