Compris.
La clé consiste à créer un composant cible DataFlavor per drop. Donc ici j'ai 4 cibles qui acceptent des gouttes de type foo, 3 boutons et 1 panel.
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")
j'ai décidé de conclure ma classe Foo de l'État.
Et de faire ce wrapper implémente une interface personnalisée que j'ai nommé TransferDataStrategy. Faire ceci maintenant me permet d'effectuer différentes actions dans la fonction importData (...) pour les mêmes saveurs.
public interface TransferDataStrategy<MODEL>
{
MODEL getModel();
OptionStrategy getOptionStrategy();
}
Mes Transferable
mises en œuvre (ce qui peut être considéré comme étant la source de la traînée) peut maintenant conduire ce qui se passe sur une chute pour la même DataFlavor
(ou déplacer du composant cible) en retournant différentes stratégies.
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;
}
...
}
}
La Source de notification deux ci-dessous prend également en charge FooCopyButtonFlavor, mais renvoie une stratégie différente.
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;
}
...
}
}
Ceci est assez difficile à expliquer mais j'espère que cela pourrait aider.