java中SWT鼠标单击事件监听器

注意是swt,不是swing之类的,还有要鼠标单击事件,鼠标按下事件和弹起事件不能满足要求就是问单击事件啊,鼠标按下事件和弹起事件都会出bug,鼠标单击事件不等于鼠标按下... 注意是swt,不是swing之类的,还有要鼠标单击事件,鼠标按下事件和弹起事件不能满足要求
就是问单击事件啊,鼠标按下事件和弹起事件都会出bug,鼠标单击事件不等于鼠标按下和弹起事件明白吗,也不能完全由这两者代替,鼠标单击事件是最重要的鼠标事件,鼠标按下和弹起事件在swing和awt都很少用到的,也不好控制,正规的按钮一定要相应鼠标单击事件,相应鼠标按下事件,这个按钮就不正常
不信你把鼠标放在浏览器的关闭按钮,按下鼠标左键,然后移出关闭按钮,再松开鼠标,这是浏览器并不会关闭,如果按钮是用鼠标按下事件处理的,就会关闭,如果鼠标是弹起事件处理的,鼠标在外部按下,在关闭按钮处弹起,浏览器就会关闭,这都是对用户很差的体验
展开
 我来答
yugi111
2014-05-22 · TA获得超过8.1万个赞
知道大有可为答主
回答量:5.1万
采纳率:70%
帮助的人:1.3亿
展开全部
package test;

import java.awt.Frame;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Csk extends Frame
{
private static final long serialVersionUID = 1L;

public static void main ( String[] args )
{
Csk csk = new Csk ();
csk.setTitle ("Csk");
csk.addMouseListener (new MouseAdapter ()
{
@Override
public void mousePressed ( MouseEvent e )
{
System.out.println ("down");
}

@Override
public void mouseReleased ( MouseEvent e )
{
System.out.println ("up");
}
});
csk.addWindowListener (new WindowAdapter ()
{
@Override
public void windowClosing ( WindowEvent e )
{
System.exit (0);
}
});
csk.setSize (399, 399);
csk.setLocationRelativeTo (null);
csk.setVisible (true);
}
}
更多追问追答
追问
你这只有鼠标按下事件和鼠标弹起事件,我想要鼠标单击事件,有吗
在swing里面有一个addActionListener,就要实现类似的功能
追答
package test;

import java.awt.Frame;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Csk extends Frame
{
private static final long serialVersionUID = 1L;

public static void main ( String[] args )
{
Csk csk = new Csk ();
csk.setTitle ("Csk");
csk.addMouseListener (new MouseAdapter ()
{
@Override
public void mouseClicked ( MouseEvent e )
{
System.out.println ("clicked");
}
});
csk.addWindowListener (new WindowAdapter ()
{
@Override
public void windowClosing ( WindowEvent e )
{
System.exit (0);
}
});
csk.setSize (399, 399);
csk.setLocationRelativeTo (null);
csk.setVisible (true);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wh猎人
2014-05-22 · TA获得超过1125个赞
知道大有可为答主
回答量:1157
采纳率:89%
帮助的人:658万
展开全部
为什么不能满足?

mouseUp就是按下之后被释放,mouseDown是按下去还没有释放。
你可以结合Control的bound和location来计算按下和释放时的位置来确定是否进行必要的事件处理。
追问
如果用这两个事件搞实在太不正常了,任何系统的按钮都是长按不放开,在外面放开,就不会触发事件,而现有的按钮无法满足,行为怪异,只要点下去,就一定会触发,有时候没有释放,只有按下,有时候只有按下没有释放,这些情况太复杂了,如果自己弄会容易出bug的,swt的的确确没有正宗的鼠标单击事件吗
追答
就目前看没有,呵呵。
因为即使在外面释放,getSource返回的也是原来的控件。
所以解决办法只有两个:
1、按我回答的那种,自己判断一下释放时是否还在原控件范围内
2、在mouseDown时就把事件触发,执行完需要的操作。用户用用也就习惯了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式