问题描述:使用图像(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