OSDN Git Service

ディレクトリdnd, 削除ボタンイベント処理実装
authoryukihane <yukihane.feather@gmail.com>
Wed, 31 Aug 2011 15:05:25 +0000 (00:05 +0900)
committeryukihane <yukihane.feather@gmail.com>
Wed, 31 Aug 2011 15:07:32 +0000 (00:07 +0900)
frontend/src/yukihane/inqubus/gui/DirectoryRegisterPanel.java

index d3cffea..aa83965 100644 (file)
@@ -1,5 +1,15 @@
 package yukihane.inqubus.gui;
 
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import javax.swing.DefaultListModel;
 import javax.swing.GroupLayout;
 import javax.swing.JButton;
@@ -7,6 +17,7 @@ import javax.swing.JList;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.LayoutStyle.ComponentPlacement;
+import javax.swing.TransferHandler;
 
 /**
  *
@@ -21,6 +32,9 @@ class DirectoryRegisterPanel extends JPanel {
     private final JButton btnSearchVideoDel = new JButton("削除");
 
     DirectoryRegisterPanel() {
+        lstSearchVideo.setTransferHandler(new DirectoryTransferHandler(mdlSearchVideo));
+        btnSearchVideoDel.addActionListener(new DelActionListener());
+
         final JScrollPane srcSearchVideo = new JScrollPane();
         srcSearchVideo.setViewportView(lstSearchVideo);
 
@@ -46,6 +60,56 @@ class DirectoryRegisterPanel extends JPanel {
                     .addComponent(btnSearchVideoAdd))
                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
+    }
+
+    private class DelActionListener implements ActionListener {
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            final int idx = lstSearchVideo.getSelectedIndex();
+            mdlSearchVideo.removeElementAt(idx);
+        }
+    }
+}
+
+class DirectoryTransferHandler extends TransferHandler {
+
+    private static final long serialVersionUID = 1L;
+    private static final Logger logger = Logger.getLogger(DirectoryTransferHandler.class.getName());
+    private final DefaultListModel<String> model;
+
+    DirectoryTransferHandler(DefaultListModel<String> model) {
+        this.model = model;
+    }
+
+    @Override
+    public boolean canImport(TransferHandler.TransferSupport support) {
+        Transferable transferable = support.getTransferable();
+        if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+            return true;
+        }
+        return false;
+    }
 
+    @Override
+    public boolean importData(TransferHandler.TransferSupport support) {
+        boolean res = false;
+        try {
+            Transferable transferable = support.getTransferable();
+            if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+                @SuppressWarnings("unchecked")
+                final List<File> data = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
+                for (File f : data) {
+                    if (f.isDirectory()) {
+                        model.addElement(f.getPath());
+                        res = true;
+                    }
+                }
+            }
+            return res;
+        } catch (UnsupportedFlavorException | IOException e) {
+            logger.log(Level.SEVERE, null, e);
+            return res;
+        }
     }
 }