bco*_*lan 8 java events swt jface
我正在尝试检测包含许多其他复合材料的Composite控件上的单击事件.我试过了:
topComposite.addMouseListener(new MouseListener() {
...
@Override
public void mouseUp(MouseEvent arg0) {
logger.info("HERE");
});
});
Run Code Online (Sandbox Code Playgroud)
但事件永远不会发生.我假设当一个孩子发生鼠标事件时它会向上传播,但这不会发生.我该怎么做呢?
Ton*_*sen 11
在SWT中,一般规则是事件不会传播.对此的主要例外是遍历事件的传播 - 这个描述非常复杂.
你的问题的简单答案是你必须将听众添加到你的所有孩子Composite- 递归!
就像这样
public void createPartControl(Composite parent) {
// Create view...
final MouseListener ma = new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
System.out.println("down in " + e.widget);
}
};
addMouseListener(parent, ma);
}
private void addMouseListener(Control c, MouseListener ma) {
c.addMouseListener(ma);
if (c instanceof Composite) {
for (final Control cc : ((Composite) c).getChildren()) {
addMouseListener(cc, ma);
}
}
}
Run Code Online (Sandbox Code Playgroud)
点击的小部件e.widget如上所示.一个重要的问题是如果Controls稍后添加更多,请记住再次执行此操作.
| 归档时间: |
|
| 查看次数: |
3977 次 |
| 最近记录: |