gpt4 book ai didi

java - 如何在 SWT Canvas 上绘制选择框?

转载 作者:行者123 更新时间:2023-12-04 05:22:53 26 4
gpt4 key购买 nike

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

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

最佳答案

我的答案与我在这里给出的答案有些相似:

SWTChart mouse event handling

下面的代码应该让你知道从哪里开始。它基本上记住了 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();
}
}

它看起来像这样:

enter image description here

关于java - 如何在 SWT Canvas 上绘制选择框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13526503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com