如何在SWTcanvas上绘制选择框?

我有一个带有一些图像的SWT Canvas。 我希望我的用户通过单击,按住鼠标左键并通过移动鼠标打开选择框来选择图像的一部分。 作为视觉反馈,我想将选定的矩形显示为我图像上的透明覆盖。

问题是我不知道如何最好地实现这一目标? 有人可以给我一个暗示吗?

我的答案与我在这里给出的答案类似:

SWTChart鼠标事件处理

下面的代码可以让您了解从哪里开始。 它基本上记住了MouseDown事件的位置。 每次拖动鼠标时,都会从起始位置绘制一个矩形到当前位置。 一旦MouseUp发生,一切都会停止。

 public class DrawExample { private static boolean drag = false; private static int startX; private static int startY; private static int endX; private static int endY; public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setText("Drawing Example"); final Canvas canvas = new Canvas(shell, SWT.NONE); canvas.setSize(150, 150); canvas.setLocation(20, 20); shell.open(); shell.setSize(200, 220); canvas.addListener(SWT.MouseDown, new Listener() { @Override public void handleEvent(Event event) { startX = event.x; startY = event.y; drag = true; } }); canvas.addListener(SWT.MouseUp, new Listener() { @Override public void handleEvent(Event event) { endX = event.x; endY = event.y; drag = false; canvas.redraw(); } }); canvas.addListener(SWT.MouseMove, new Listener() { @Override public void handleEvent(Event event) { if(drag) { endX = event.x; endY = event.y; canvas.redraw(); } } }); canvas.addListener(SWT.Paint, new Listener() { @Override public void handleEvent(Event event) { if(drag) { GC gc = event.gc; gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK)); gc.setAlpha(128); int minX = Math.min(startX, endX); int minY = Math.min(startY, endY); int maxX = Math.max(startX, endX); int maxY = Math.max(startY, endY); int width = maxX - minX; int height = maxY - minY; gc.fillRectangle(minX, minY, width, height); } } }); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } } 

它看起来像这样:

在此处输入图像描述

本机平台提供了另一种方法来实现此目的。 使用SWT org.eclipse.swt.widgets.Tracker

如何通过拖动角来调整复合材料的大小