SWT在画布上放置光标位置

时间:2016-01-03 20:12:55

标签: java canvas swt

我在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;

        }

1 个答案:

答案 0 :(得分:1)

DropTargetEvent包含xy字段,其中包含光标的显示相对位置。

Point displayRelativeDrop = new Point(event.x, event.y);

您的fillRectangle必须使用相对于控件(paintC)而非显示的点。使用Control.toControl(point)从显示相对于控件相对转换。

您也不应该尝试在drop方法中绘制控件。只需在控件上调用redraw,然后在绘图侦听器中执行绘图。