我在JAVA中制作一个简单的“绘画”应用程序。我希望当用户点击画布并进行拖放操作时,监听器会获得放置光标位置,但我找不到如何制作放置监听器。当用户停止点击时,如何找到光标的位置?
我有以下代码用于拖动:
Canvas paintC = new Canvas(shell, SWT.NONE);
paintC.addDragDetectListener(new DragDetectListener() {
public void dragDetected(DragDetectEvent arg0) {
Point controlRelativePos = new Point(arg0.x, arg0.y);
displayRelativePos1 = paintC.toDisplay(controlRelativePos);
GC gc = new GC(paintC);
gc.setBackground(SWTResourceManager.getColor(SWT.COLOR_YELLOW));
gc.fillRectangle(arg0.x, arg0.y, 90, 60);
}
});
我是否应该使用拖动功能才能获得最新位置?
编辑:我试过这个,但它不起作用:
dropTarget.addDropListener(new DropTargetAdapter() {
@Override
public void drop(DropTargetEvent event) {
displayRelativePos2 = dropTarget.getDisplay().getCursorLocation();
hauteur = displayRelativePos2.y - displayRelativePos1.y;
largeur = displayRelativePos2.x - displayRelativePos1.x;
GC gc = new GC(paintC);
gc.setBackground(SWTResourceManager.getColor(SWT.COLOR_RED));
gc.fillRectangle(displayRelativePos1.x, displayRelativePos1.y, largeur, hauteur);
nbFormesAff = nbFormes +1;
forme = "Rectangle" + nbFormesAff;
pos = displayRelativePos1.x + ", " + displayRelativePos1.y +"\nhauteur:" + hauteur +" largeur:"+ largeur;
}
答案 0 :(得分:1)
DropTargetEvent
包含x
和y
字段,其中包含光标的显示相对位置。
Point displayRelativeDrop = new Point(event.x, event.y);
您的fillRectangle
必须使用相对于控件(paintC)而非显示的点。使用Control.toControl(point)
从显示相对于控件相对转换。
您也不应该尝试在drop
方法中绘制控件。只需在控件上调用redraw
,然后在绘图侦听器中执行绘图。