java – 如何跟踪由子控件制作的SWT复合鼠标?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何跟踪由子控件制作的SWT复合鼠标?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2000字,纯文字阅读大概需要3分钟。
内容图文
![java – 如何跟踪由子控件制作的SWT复合鼠标?](/upload/InfoBanner/zyjiaocheng/800/17edad7138ef424f89dcc552b8fc2939.jpg)
我创建了自己的控件:
我想跟踪鼠标并添加了MouseTrackListener.不幸的是,当鼠标移动到我的复合部分(即标签和按钮)上时,也会生成MouseEnter和MouseLeave事件.
[Mouse enter] - mouse enters the empty space
[Mouse hover] - mouse is over the empty space
[Mouse exit] - mouse moved over label
[Mouse enter] - mouse leaves label and enters empty space
[Mouse hover] - mouse over empty space
[Mouse exit] - mouse leaves composite
如何将复合材料作为一个完整的东西而不是子零件进行跟踪?
public class MyComposite extends Composite {
public MyComposite(final Composite parent, final int style) {
super(parent, style);
final Label lbl = new Label(this, SWT.NONE);
lbl.setBounds(10, 10, 78, 15);
lbl.setText("My Composite");
final Button btn = new Button(this, SWT.NONE);
btn.setBounds(190, 29, 75, 25);
btn.setText("Ok");
pack();
}
public static void main(final String[] args) {
final Shell shell = new Shell(Display.getDefault());
shell.setText("Testcase");
shell.setLayout(new FillLayout());
final MyComposite comp = new MyComposite(shell, SWT.NONE);
comp.addMouseTrackListener(new MouseTrackListener() {
@Override
public void mouseHover(final MouseEvent e) {
System.out.println("[Mouse hover]");
}
@Override
public void mouseExit(final MouseEvent e) {
System.out.println("[Mouse exit]");
}
@Override
public void mouseEnter(final MouseEvent e) {
System.out.println("[Mouse enter]");
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
解决方法:
如果只想获取鼠标移动事件,可以向Composite添加无类型事件.应该是这样的
final Composite comp = new Composite(shell, org.eclipse.swt.SWT.NONE);
comp.addListener(SWT.MouseMove, new Listener() {
public void handleEvent(Event event) {
System.out.println("hit");
}
});
如果将相同的Listener实例添加到MyComposite的所有子项,则可以捕获所有鼠标移动事件.
或者,您可以使用Display.addFilter捕获所有鼠标事件,并过滤在Composite实例或其任何子项上发生的事件.
第三种选择是使用Composite.setCapture在鼠标进入复合区域时获取所有鼠标事件,并在离开时停止捕获.
其中我认为第一种选择可能是最好的选择.
内容总结
以上是互联网集市为您收集整理的java – 如何跟踪由子控件制作的SWT复合鼠标?全部内容,希望文章能够帮你解决java – 如何跟踪由子控件制作的SWT复合鼠标?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。