我定义了一个 Node 类扩展 Canvas 类并处理鼠标事件。
public class Node extends Canvas {
String name;
public String getName() { return name; }
public Node(Composite parent, int style, String name) {
super(parent, style);
// TODO Auto-generated constructor stub
this.name = name;
this.setBackground(new Color(Display.getCurrent(), 0, 0, 0));
this.addMouseListener(new MouseListener() {
@Override
public void mouseUp(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("Mouse up (" + arg0.x + ", " + arg0.y + ") at node " + getName());
}
@Override
public void mouseDown(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("Mouse down (" + arg0.x + ", " + arg0.y + ") at node " + getName());
}
@Override
public void mouseDoubleClick(MouseEvent arg0) {
System.out.println("Double click at node " + getName());
}
});
}
然后我创建了一个 Composite 对象并添加了两个 Node 对象:
Node node1 = new Node(this, SWT.NONE, "node 1");
node1.setBounds(25, 25, 50, 50);
Node node2 = new Node(this, SWT.NONE, "node 2");
node2.setBounds(35, 35, 60, 60);
node2.setBackground(new Color(Display.getCurrent(), 75, 75, 75));
请注意,我选择了节点的位置,以便它们共享一些公共区域。使用颜色来区分两个节点,我发现node1
它显示在顶部,而node2
显示在后面。如果我在共享区域应用鼠标事件,node1
处理这些事件而node2
不是。
node2
之后添加到组合中node1
,所以我预计node2
会有特权,即如果我将鼠标事件应用于共享区域,node2
应该处理这些事件。
如何解决这个问题?