问题是关于 Java 5 和Drag n Drop。
有没有办法确定放置目标TransferHandler
中的拖动源组件?
我需要在canImport(..)
或importData(..)
方法中了解这一点,以便针对相同类型或DataFlavor
的传输数据采取不同的操作。
我目前实现这一目标的方法是劫持DataFlavor“人类可读字段”并设置字符串操作,结果如下:
DataFlavor localCopyFooFlavor = new DataFlavor(Foo.class, "COPY");
DataFlavor localEditFooFlavor = new DataFlavor(Foo.class, "EDIT");
然后使用此字段决定要采取的操作。 我很确定这是错误的。
感谢。
答案 0 :(得分:3)
想出来。
关键是为每个放置目标组件创建一个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
(或丢弃目标组件)的丢弃。< / p>
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;
}
...
}
}
这很难解释,但希望它可能会有所帮助。