Требуется помощь для реализации перетаскивания из Java-приложения и переноса в собственную файловую систему - PullRequest
4 голосов
/ 27 ноября 2009

У меня есть приложение Java Swing, которое показывает список файлов / папок, которые были загружены на сервер. У меня есть требование для загрузки выбранных файлов / папок в собственную файловую систему с помощью перетаскивания. Я искал ссылки, но почти каждая ссылка описывает Drag and Drop в приложении Java Swing. Мое требование - перетащить файл из приложения Java Swing и перенести его в собственную файловую систему.

Мне нужна помощь, чтобы узнать, как я могу получить место, куда пользователь поместил выбранные файлы / папки в собственную файловую систему.

Например, предположим, что пользователь перетащил файл и поместил его прямо в папку C:\Back_Up , восстановив окно приложения Java . Как я могу определить местоположение, в которое пользователь удалил файл, то есть C:\Back_Up?

Ответы [ 5 ]

1 голос
/ 27 ноября 2009

AFAIK, невозможно получить информацию о том, куда был уронен перетаскиваемый объект. Думаю, ваша идея состояла в том, чтобы узнать точку отбрасывания и скопировать файл в эту позицию на втором шаге.

Но я думаю, это не сработает, и, что еще хуже, все это может зависеть от ОС. Бьюсь об заклад, вы должны положить весь файл на передачу. Я знаю, что это возможно с SWT, но SWT поставляется с некоторыми родными библиотеками ...

Вот как минимум одна ссылка, которая показывает пример для обратного: Перетаскивание группы файлов в дерево

1 голос
/ 27 ноября 2009

Спасибо, Андреас .. У нас есть компонент JAVA в виде таблицы, из которой мы перетаскиваем файл и переносим его в собственную файловую систему. У нас есть код вроде

A> Компонент - JXTree. Мы установили следующее свойство для поддержки Drag And Drop.

Component.setDropMode(DropMode.INSERT); 

Component.setDragEnabled(true); 

DragSource ds = DragSource.getDefaultDragSource();

DragGestureRecognizer dgr = ds.createDefaultDragGestureRecognizer( Component,    
                 DnDConstants.ACTION_MOVE, new FileDragGestureListener());

B> Мы написали класс, который реализует Drag Gesture Listener.

открытый класс FileDragGestureListener расширяет DragSourceAdapter, реализует DragGestureListener {

public void dragGestureRecognized (DragGestureEvent dge) {

 We get selected row from table.
 Download the selected File to Native file System's TEMP directory. 
FileSystemView fsv = FileSystemView.getFileSystemView();
Icon icn = fsv.getSystemIcon(File);
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension dim = tk.getBestCursorSize(icn.getIconWidth(), icn.getIconHeight());
BufferedImage buff = new BufferedImage(dim.width, dim.height,   
                                    BufferedImage.TYPE_INT_ARGB);
if (DragSource.isDragImageSupported()) {
            evt.startDrag(DragSource.DefaultCopyDrop, buff, new Point(0, 0),
                    new TextFileTransferable(File),
                    this);
        } else {
            cursor = tk.createCustomCursor(buff, new Point(0, 0), "sString");
            evt.startDrag(cursor, null, new Point(0, 0),
                    new TextFileTransferable(File),
                    this);
        }

}

Класс TextFileTransferable реализует Transferable {

File temp;




public TextFileTransferable(File temp) throws IOException {

    this.temp = temp;
}

public Object getTransferData(DataFlavor flavor) {
     List list = new ArrayList();
    list.add(temp);
    return list;
}

public DataFlavor[] getTransferDataFlavors() {

    DataFlavor[] df = new DataFlavor[1];
    df[0] = DataFlavor.javaFileListFlavor;
    return df;
}

public boolean isDataFlavorSupported(DataFlavor flavor) {


    if (flavor == DataFlavor.javaFileListFlavor) {
        return true;
    }
    return false;
}

}

Так вот, как мы можем загрузить файл до% TEMP%, тогда мы не сможем переместить этот файл в место, где он был удален.

Пожалуйста, подскажите, где я не прав ИЛИ как лучше всего реализовать эту функцию перетаскивания.

Спасибо

0 голосов
/ 28 декабря 2009

Некоторые подсказки можно получить в JDesktop Integration Components: https://jdic.dev.java.net/

0 голосов
/ 10 декабря 2009

Может быть, если бы вы знали в общих чертах, в какие каталоги будут перетекать люди, ваше приложение может создавать файловые объекты, указывающие на эти каталоги, а затем использовать шаблон проектирования Observer, чтобы сообщать вашему приложению, когда в него что-то упало (опрашивая содержимое, возможно), хотя, если другие программы / люди помещают вещи в эти каталоги, вы тоже получите уведомление об этом, но тогда вы можете сравнить время, когда пришло уведомление, со временем, когда вы могли знать, что вы сделали какое-то удаление. Это уменьшило бы его до, возможно, маловероятного (хотя и неудобно все еще возможного) случая, когда кто-то другой заскочил в каталог A почти в то же самое время, когда вы зашли в каталог B.

Удачи!

0 голосов
/ 27 ноября 2009

Я полагаю, Java Desktop API может это сделать. Не уверен насчет деталей, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...