我試圖在我的項目中實現本機拖動&拖放功能。GWT本地拖放事件處理(兩個來源,一個目標)
我已經創建了兩個圖像的小部件image1
和image2
:
image1.getElement().setDraggable(Element.DRAGGABLE_TRUE);
image2.getElement().setDraggable(Element.DRAGGABLE_TRUE);
然後創建處理程序爲每一個:
image1.addDragStartHandler(new DragStartHandler() {
@Override
public void onDragStart(DragStartEvent event) {
event.setData("text", "images/img1.svg");
});
image2.addDragStartHandler(new DragStartHandler() {
@Override
public void onDragStart(DragStartEvent event) {
event.setData("text", "images/img2.svg");
});
這是DragOverHandler:
boundaryPanel.addDomHandler(new DragOverHandler() {
public void onDragOver(DragOverEvent event) {
boundaryPanel.getElement().getStyle().setBackgroundColor("#ffa");
}
}, com.google.gwt.event.dom.client.DragOverEvent.getType());
然後我創建了DropHandler,它應該能夠決定哪個圖像被拖動。拖動時,應該爲boundaryPanel創建一個新面板(對於每個拖動的圖像)。當我運行下面的代碼並拖動image1
或image2
,ap1
顯示爲他們兩個。我認爲我的if-else條件不能正常工作:
boundaryPanel.addDomHandler(new DropHandler() {
@Override
public void onDrop(DropEvent event) {
event.preventDefault();
int x = (event.getNativeEvent().getClientX() - boundaryPanel.getAbsoluteLeft());
int y = (event.getNativeEvent().getClientY() - boundaryPanel.getAbsoluteTop());
boundaryPanel.getElement().getStyle().clearBackgroundColor();
if(image1 != null){ <---think this is the problem
//insert absolutePanel ap1
ap1.add(ap2);
ap1.add(ap3);
ap1.add(ap4);
ap1.setWidgetPosition(ap3, 150, 0);
ap1.setWidgetPosition(ap4, 474, 0);
boundaryPanel.add(ap1, x, y);
}
else if (img2 != null) {
//insert absolutePanel ap5
ap5.add(ap6);
ap5.add(ap7);
ap5.add(ap8);
ap5.setWidgetPosition(ap7, 150, 0);
ap5.setWidgetPosition(ap8, 474, 0);
boundaryPanel.add(ap5, x, y);
}
}}, DropEvent.getType());
我在做什麼錯了?
感謝您的幫助。
感謝您的背景!你能幫助我正確的條件嗎?我不知道如何使它獨一無二。 – Jogi
有沒有辦法說:如果image1或image2被拖拽,做些什麼? – Jogi
我在答案中加入了一個方法,希望它能幫助 –