2010-06-17 31 views
5

Câu hỏi liên quan đến Java 5 và Kéo n Thả.Làm thế nào để tìm ra thành phần nguồn kéo trong TransferHandler mục tiêu thả?

Có cách nào để xác định nguồn kéo thành phần trong mục tiêu thả TransferHandler?

Tôi cần biết điều này trong phương pháp canImport(..) hoặc importData(..) của mình để thực hiện các hành động khác nhau cho dữ liệu chuyển cùng loại hoặc DataFlavor.

Con đường tôi đã đạt được điều này hiện đang để cướp DataFlavor 'human readable Dòng' và thiết lập một hành động chuỗi, kết quả là một cái gì đó như thế này:

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

Sau đó, sử dụng trường này để quyết định những hành động để thực hiện. Tôi khá chắc chắn điều này là sai.

Cảm ơn.

Trả lời

3

Đã tìm ra.

Điều quan trọng là tạo thành phần DataFlavor cho mỗi mục tiêu thả. Vì vậy, ở đây tôi có 4 mục tiêu chấp nhận các loại foo, 3 nút và 1 bảng điều khiển.

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") 

Tôi quyết định kết thúc lớp học Foo.

Và làm cho trình bao bọc này triển khai giao diện tùy chỉnh mà tôi đặt tên là TransferDataStrategy. Làm điều này bây giờ cho phép tôi thực hiện các hành động khác nhau trong hàm importData (...) cho cùng một hương vị.

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

    OptionStrategy getOptionStrategy(); 
} 

My Transferable triển khai (có thể được coi là nguồn gốc của sự kéo) bây giờ có thể lái xe gì xảy ra trên thả cho cùng DataFlavor (hoặc Drop Component Target) bằng cách trả lại chiến lược khác nhau.

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; 
     } 
    ... 
    } 
} 

Lưu ý Nguồn hai bên dưới cũng hỗ trợ FooCopyButtonFlavor, nhưng trả về một chiến lược khác.

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; 
     } 
    ... 
    } 
} 

Điều này khá khó giải thích nhưng hy vọng nó có thể hữu ích.

Các vấn đề liên quan