中易网

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

答案:2  悬赏:70  
解决时间 2021-01-12 15:24
  • 提问者网友:相思似海深
  • 2021-01-12 07:48
java中SWT鼠标单击事件监听器
最佳答案
  • 二级知识专家网友:雾月
  • 2021-01-12 08:08
为什么不能满足?

mouseUp就是按下之后被释放,mouseDown是按下去还没有释放。
你可以结合Control的bound和location来计算按下和释放时的位置来确定是否进行必要的事件处理。追问如果用这两个事件搞实在太不正常了,任何系统的按钮都是长按不放开,在外面放开,就不会触发事件,而现有的按钮无法满足,行为怪异,只要点下去,就一定会触发,有时候没有释放,只有按下,有时候只有按下没有释放,这些情况太复杂了,如果自己弄会容易出bug的,swt的的确确没有正宗的鼠标单击事件吗追答就目前看没有,呵呵。
因为即使在外面释放,getSource返回的也是原来的控件。
所以解决办法只有两个:
1、按我回答的那种,自己判断一下释放时是否还在原控件范围内
2、在mouseDown时就把事件触发,执行完需要的操作。用户用用也就习惯了。
全部回答
  • 1楼网友:酒醒三更
  • 2021-01-12 08:15
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);
}
}追问你根本都不知道我再问什么,哎追答没有人能看懂你问什么,楼下的看看他的回复追问就是问单击事件啊,鼠标按下事件和弹起事件都会出bug,鼠标单击事件不等于鼠标按下和弹起事件明白吗,也不能完全由这两者代替,鼠标单击事件是最重要的鼠标事件,鼠标按下和弹起事件在swing和awt都很少用到的,也不好控制,正规的按钮一定要相应鼠标单击事件,相应鼠标按下事件,这个按钮就不正常
不信你把鼠标放在浏览器的关闭按钮,按下鼠标左键,然后移出关闭按钮,再松开鼠标,这是浏览器并不会关闭追答这个体验一点不差,相反很好用,很多软件都是这样的,鼠标释放的时候,动作执行,这样避免误操作追问你说的这个一定要鼠标单击事件才能够满足,就是我说的鼠标单击事件,唯有此事件才能够满足这个功能,鼠标按下和弹起是满足不了的,除非组合很复杂的控制,用这两个事件创造出一个鼠标单击事件,才能够实现,而且逻辑很复杂,稍有不慎,就出bug
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息