1 package yukihane.inqubus.gui;
3 import java.awt.datatransfer.DataFlavor;
4 import java.awt.datatransfer.Transferable;
5 import java.awt.datatransfer.UnsupportedFlavorException;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
9 import java.io.IOException;
10 import java.util.List;
11 import java.util.logging.Level;
12 import java.util.logging.Logger;
13 import javax.swing.DefaultListModel;
14 import javax.swing.GroupLayout;
15 import javax.swing.JButton;
16 import javax.swing.JList;
17 import javax.swing.JPanel;
18 import javax.swing.JScrollPane;
19 import javax.swing.LayoutStyle.ComponentPlacement;
20 import javax.swing.TransferHandler;
26 class DirectoryRegisterPanel extends JPanel {
28 private static final long serialVersionUID = 1L;
29 private final DefaultListModel<String> mdlSearchVideo = new DefaultListModel<>();
30 private final JList<String> lstSearchVideo = new JList<>(mdlSearchVideo);
31 private final JButton btnSearchVideoAdd = new JButton("追加...");
32 private final JButton btnSearchVideoDel = new JButton("削除");
34 DirectoryRegisterPanel() {
35 lstSearchVideo.setTransferHandler(new DirectoryTransferHandler(mdlSearchVideo));
36 btnSearchVideoDel.addActionListener(new DelActionListener());
38 final JScrollPane srcSearchVideo = new JScrollPane();
39 srcSearchVideo.setViewportView(lstSearchVideo);
41 GroupLayout gl_pnlSearchVideo = new GroupLayout(this);
42 setLayout(gl_pnlSearchVideo);
43 gl_pnlSearchVideo.setHorizontalGroup(
44 gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
45 .addComponent(srcSearchVideo, GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
46 .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlSearchVideo.createSequentialGroup()
47 .addContainerGap(269, Short.MAX_VALUE)
48 .addComponent(btnSearchVideoAdd)
50 .addComponent(btnSearchVideoDel)
53 gl_pnlSearchVideo.setVerticalGroup(
54 gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
55 .addGroup(gl_pnlSearchVideo.createSequentialGroup()
56 .addComponent(srcSearchVideo, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
57 .addPreferredGap(ComponentPlacement.RELATED)
58 .addGroup(gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
59 .addComponent(btnSearchVideoDel)
60 .addComponent(btnSearchVideoAdd))
61 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
65 private class DelActionListener implements ActionListener {
68 public void actionPerformed(ActionEvent e) {
69 final int idx = lstSearchVideo.getSelectedIndex();
70 mdlSearchVideo.removeElementAt(idx);
75 class DirectoryTransferHandler extends TransferHandler {
77 private static final long serialVersionUID = 1L;
78 private static final Logger logger = Logger.getLogger(DirectoryTransferHandler.class.getName());
79 private final DefaultListModel<String> model;
81 DirectoryTransferHandler(DefaultListModel<String> model) {
86 public boolean canImport(TransferHandler.TransferSupport support) {
87 Transferable transferable = support.getTransferable();
88 if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
95 public boolean importData(TransferHandler.TransferSupport support) {
98 Transferable transferable = support.getTransferable();
99 if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
100 @SuppressWarnings("unchecked")
101 final List<File> data = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
102 for (File f : data) {
103 if (f.isDirectory()) {
104 model.addElement(f.getPath());
110 } catch (UnsupportedFlavorException | IOException e) {
111 logger.log(Level.SEVERE, null, e);