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 オブジェクトを作成し、2 つの 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));
いくつかの共通領域を共有するようにノードの位置を選択したことに注意してください。色を使って 2 つのノードを区別するとnode1
、 が上に表示され、node2
が後ろに表示されていることがわかりました。共有領域でマウス イベントを適用するnode1
と、イベントを処理し、処理node2
しません。
node2
の後にコンポジットに追加されるnode1
ため、特権があると予想されnode2
ます。つまり、共有領域にマウスイベントを適用するとnode2
、イベントを処理する必要があります。
この問題を解決するにはどうすればよいですか?