Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Перетащите и Отбросьте и Передача данных
Соединение всего этого - DnD и CCP
Домашняя страница > Создание GUI С JFC/Swing > Перетащите и Отбросьте и Передача данных

Соединение всего этого - DnD и CCP

Мы показали, как реализовать, перетаскивают и отбрасывают поддержку и как реализовать сокращение, копию, поддержку вставки. Как Вы комбинируете обоих в одном компоненте?

Вы реализуете обоих в пределах TransferHandler's importData метод, как это:

if (transferSupport.isDrop()) {
    // put data in transferSupport.getDropLocation()
} else {
    // determine where you want the paste to go (ex: after current selection)
    // put data there
}

ListCutPaste пример, обсужденный на CCP в F нетекстовой Компонентной странице, поддерживает и dnd и ccp. Вот importData метод ( if-else логика отбрасывания является полужирной):

    public boolean importData(TransferHandler.TransferSupport info) {
        String data = null;

        //If we cannot handle the import, bail now.
        if (!canImport(info)) {
            return false;
        }

        JList list = (JList)info.getComponent();
        DefaultListModel model = (DefaultListModel)list.getModel();
        //Fetch the data -- bail if this fails
        try {
            data = (String)info.getTransferable().getTransferData(DataFlavor.stringFlavor);
        } catch (UnsupportedFlavorException ufe) {
            System.out.println("importData: unsupported data flavor");
            return false;
        } catch (IOException ioe) {
            System.out.println("importData: I/O exception");
            return false;
        }

        if (info.isDrop()) { //This is a drop
            JList.DropLocation dl = (JList.DropLocation)info.getDropLocation();
            int index = dl.getIndex();
            if (dl.isInsert()) {
                model.add(index, data);
                return true;
            } else {
                model.set(index, data);
                return true;
            }
        } else { //This is a paste
            int index = list.getSelectedIndex();
            // if there is a valid selection,
            // insert data after the selection
            if (index >= 0) {
                model.add(list.getSelectedIndex()+1, data);
            // else append to the end of the list
            } else {
                model.addElement(data);
            }
            return true;
        }
    }

Это - единственное место, где Вы должны установить if-else логика, чтобы различить dnd и ccp.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Используя и Создание DataFlavor
Следующая страница: Дополнительная информация