【发布时间】:2012-11-16 02:56:07
【问题描述】:
我要做的是用鼠标在四个标签上绘制,这些标签通过paintListner与盒子布局组合在一起,添加到每个标签上。此外,每个标签都有一个 MouseMoveListener,它将每个鼠标点添加到一个 ArrayList。这是一个标签 l 的代码:
l.addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(MouseEvent e) {
compLocation.setLocation(l.getLocation().x, l.getLocation().y);
pointsToDraw1.get(n).add(new Point(e.x, e.y));
l.redraw();
}
});
l.addPaintListener(new PaintListener(){
@Override
public void paintControl(PaintEvent e) {
Device device = Display.getCurrent ();
Color red = new Color (device, 255, 0, 0);
e.gc.setBackground(red);
for(Point p : pointsToDraw1.get(n)){
e.gc.fillRectangle(p.x, p.y, 4, 4);
}
}
});
当我用鼠标移动标签时,一切正常(参见示例图像的顶部)。一旦我按下鼠标左键并在绘图时保持按下状态,我只在开始按下按钮的标签上绘图(参见示例图像的底部)。这是因为我通过单击自动选择标签。是否有可能以某种方式禁用此自动选择并仅检查是否按下了鼠标左键?我只想在按下鼠标左键时进行绘制。
图片:
【问题讨论】:
-
您是否尝试过为每个标签添加
SWT.MouseDown的侦听器并设置event.doit = false;?这可能阻止选择。 -
那确实行不通。还是同样的问题。我添加了以下内容: Listener listener = new Listener () { public void handleEvent(Event e) { e.doit = false; } }; l.addListener(SWT.MouseDown, listener);
-
“我通过点击自动选择标签”是什么意思。你说标签被选中是什么意思?
-
@WaqasIlyas 我猜他的意思是他点击的标签获得焦点。
-
@user1643687 您是否尝试在
SWT.MouseDown侦听器中对标签的父Composite调用setFocus()和forceFocus()?
标签: java user-interface swt components mouselistener