我正在用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具有xy字段,其中包含显示光标的相对位置。

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/

10-09 15:59