Capito.
La chiave è creare un componente DataFlavor per drop target. Quindi qui ho 4 obiettivi che accettano gocce di tipo foo, 3 pulsanti e 1 pannello.
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")
Ho deciso di concludere la mia classe di stato Foo.
E rendere questo wrapper implementa un'interfaccia personalizzata che ho chiamato TransferDataStrategy. In questo modo ora mi consente di eseguire diverse azioni nella funzione importData (...) per gli stessi sapori.
public interface TransferDataStrategy<MODEL>
{
MODEL getModel();
OptionStrategy getOptionStrategy();
}
miei Transferable
implementazioni (che può essere pensato come la fonte della resistenza) possono ora guidare ciò che accade su goccia per lo stesso DataFlavor
(o goccia di destinazione Component) restituendo strategie diverse.
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;
}
...
}
}
Avviso Fonte Due Di seguito è anche supporta FooCopyButtonFlavor, ma restituisce una strategia diversa.
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;
}
...
}
}
Questo è piuttosto difficile da spiegare, ma si spera che potrebbe essere d'aiuto.