我正在用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;
}
最佳答案
DropTargetEvent
具有x
和y
字段,其中包含显示光标的相对位置。
Point displayRelativeDrop = new Point(event.x, event.y);
您的
fillRectangle
必须使用相对于控件(paintC)而不是显示器的点。使用Control.toControl(point)
从显示相对于控件相对转换。您也不应尝试在
drop
方法中绘制控件。只需在控件上调用redraw
并在绘画侦听器中绘制即可。关于java - SWT在 Canvas 上放置光标的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34581087/