java - SWT 中的鼠标事件

标签 java events swt composite java-canvas

我定义了一个 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));

请注意,我选择的节点位置使它们共享一些公共(public)区域。使用颜色区分两个节点,我认识到 node1 显示在顶部,而 node2 显示在后面。如果我在共享区域应用鼠标事件,node1 会处理这些事件而 node2 不会。

node2node1 之后被添加到组合中,所以我希望 node2 将拥有特权,即如果我将鼠标事件应用于共享区域,node2 应该处理事件。

如何解决这个问题?

最佳答案

如您所见,可见的控件(以及位于另一个之上的控件)获取了鼠标事件。我认为这种行为是正确的,也是意料之中的。我不认为你是在问即使 node1node2 之上并且绘制在上面但仍然让 node2 接收所有鼠标事件。使用标准方法可能无法实现。

但是,如果您要确保 node2 出现在 node1 之上并因此接收鼠标事件,您可以颠倒创建顺序,或者您可以使用 Control#moveAbove(Control)如下所示:

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));

// Use moveAbove(null) to move node2 above all its siblings
node2.moveAbove(node1);

关于java - SWT 中的鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14002375/

相关文章:

java - 用于提取键值对的正则表达式

javascript - 阻止 Javascript 事件影响子元素

javascript - 如何使用 Firebug 跟踪事件?

java - Android:带有事件的日历

java - 我应该处理从 EditorSupport 返回的 jface CellEditors

java - 无法删除 ParseObject

java - 解析 HTML 以获取内容及其标签

java - volatile 变量没有给出预期的输出

java - 介绍如何设置无拖放设计器?

java - ComboViewer 和 Combo 有什么区别?