問題描述:使用圖像(DND)在SWT標籤上放置文件
用戶應該能夠將圖像文件從他的計算機拖到RCP應用程序。放棄目標是通過Eclipse FormToolkit生成的SWT標籤。 (Eclipse Forms)
使用以下代碼,用戶可以將圖像文件以及瀏覽器中的圖像拖放到標籤上(效果很好)。 出現該問題,當標籤顯示的圖像:
lblImage.setImage()
在我的例子,我設置了標籤的圖像,在用戶放棄了文件。因此,後續拖動不再註冊。 (dragEnter事件方法不再被調用)
/** create label **/
Label lblImage = fFormToolkit.createLabel(fForm.getBody(), "");
GridData gd = new GridData();
gd.widthHint = 200;
gd.heightHint = 200;
lblImage.setLayoutData(gd);
/** drag drop support **/
int ops = DND.DROP_COPY | DND.DROP_LINK | DND.DROP_DEFAULT;
final FileTransfer fTransfer = FileTransfer.getInstance();
final ImageTransfer iTransfer = ImageTransfer.getInstance();
Transfer[] transfers = new Transfer[] { fTransfer, iTransfer };
DropTarget target = new DropTarget(fLblArtWork, ops);
target.setTransfer(transfers);
target.addDropListener(new DropTargetAdapter() {
@Override
public void drop(DropTargetEvent event) {
if (event.data instanceof String[]) {
String[] filenames = (String[]) event.data;
if (filenames.length > 0){
Image i = new Image(Display.getCurrent(), filepath);
lblImage.setImage(i);
}
} else if (event.data instanceof ImageData) {
Image i = new Image(Display.getCurrent(), data);
lblImage.setImage(i);
}
}
public void dragEnter(DropTargetEvent event) {
System.out.println("drag enter");
event.detail = DND.DROP_COPY;
}
});
問題:如何註冊一個SWT標籤顯示的圖像dragEnter事件事件?
感謝
你可以請充實你的drop()方法來展示你如何設置標籤? – rancidfishbreath 2011-03-22 15:56:51
我在「drop」方法中添加了「drop」方法的詳細信息... 以及第一個「if」子句,我從「imageData」-drops(從瀏覽器或類似程序中)區分「正常」文件滴..) – xeronimus 2011-03-25 12:12:48
我想SWT會在標籤的「前面」繪製圖像,因此標籤本身不再註冊鼠標拖動輸入。也許我應該使用Canvas作爲放置目標並顯示圖像... – xeronimus 2011-03-25 12:19:16