Как узнать, что исходный компонент перетаскивания в отбрасывании предназначается для TransferHandler?

Вопрос расценивает Java 5, и Перетащите Отбрасывание n.

Есть ли способ определить исходный компонент перетаскивания в цели отбрасывания TransferHandler?

Я должен знать это в моем canImport(..) или importData(..) метод для принятия различных мер для, передает данные того же типа или DataFlavor.

Путем я достиг, это в настоящее время должно похищать DataFlavor 'Человекочитаемое Поле' и устанавливать строковое действие, закончившись что-то вроде этого:

DataFlavor localCopyFooFlavor = new DataFlavor(Foo.class, "COPY");
DataFlavor localEditFooFlavor = new DataFlavor(Foo.class, "EDIT");

Затем используйте это поле для решения что действие взять. Я вполне уверенный это неправильно.

Спасибо.

5
задан JARC 17 June 2010 в 10:54
поделиться

1 ответ

Разобрался.

Ключевым моментом является создание DataFlavor для каждого целевого компонента перетаскивания. Итак, у меня есть 4 цели, которые принимают капли типа foo, 3 кнопки и 1 панель.

fooCopyButtonFlavor   = new DataFlavor(FooCopyButtonTransferData.class,   "Foo 'Copy Button' Transfer Data");
fooEditButtonFlavor   = new DataFlavor(FooEditButtonTransferData.class,   "Foo Entry 'Edit Button' Transfer Data");
fooDeleteButtonFlavor = new DataFlavor(FooDeleteButtonTransferData.class, "Foo Entry 'Delete Button' Transfer Data");
fooDialogPanelFlavor  = new DataFlavor(FooDialogPanelTransferData.class, "Foo Entry 'Dialog Panel' Transfer Data")

Я решил завершить свой класс состояния Foo.

И пусть эта оболочка реализует настраиваемый интерфейс, который я назвал TransferDataStrategy. Это позволяет мне выполнять различные действия в функции importData (...) для одних и тех же вариантов.

public interface TransferDataStrategy<MODEL>
{
    MODEL getModel();

    OptionStrategy getOptionStrategy();
}

Мои Transferable реализации (которые можно рассматривать как ИСТОЧНИК перетаскивания) теперь могут управлять тем, что происходит при перетаскивании для того же DataFlavor (или компонента Drop Target), возвращая разные стратегии.

public class SourceOneTransferOperation implements Transferable
{
    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
    {
        if (flavor.equals(FooDataFlavor.fooCopyButtonFlavor)) {
            TransferDataStrategy<Foo> tds = new FooCopyAAA(model);
            return tds;
        }
     ...
    }
}

Второй источник уведомления ниже также поддерживает FooCopyButtonFlavor, но возвращает другую стратегию.

public class SourceTwoTransferOperation implements Transferable
{
    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
    {
        if (flavor.equals(FooDataFlavor.fooCopyButtonFlavor)) {
            TransferDataStrategy<Foo> tds = new FooCopyBBB(model);
            return tds;
        }
     ...
    }
}

Это довольно сложно объяснить, но, надеюсь, это поможет.

3
ответ дан 15 December 2019 в 06:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: