JAVA高手看过来:Component响应鼠标单击,双击问题!(100分)

  • 主题发起人 主题发起人 wheel
  • 开始时间 开始时间
W

wheel

Unregistered / Unconfirmed
GUEST, unregistred user!
最近开始学JAVA,写点Applet,感觉有些地方很不爽[:(]
大概是用Delphi懒习惯了.[:P]
问题:
比如我给Panel添加mouseListener,当鼠单击时弹出PopupMenu,双击时弹出一个Frame.
如何搞定?
JAVA怎么就不搞个双击事件呢?感觉用起来好麻烦.
还有,PopupMenu怎么不搞个isVisible()呢?是我的要求奇怪还是我没找到?
 
可以支持鼠标右键的单击事件,象下面这样判断:
class mouseAdapter extends MouseAdapter {
public void mouseReleased(MouseEvent e) {
if (! e.isPopupTrigger()) return;
/* 在下面处理鼠标右键单击事件 */
}
}

在jdk1.2上对JButton上的事件进行了单击和双击的不同事件,是通过对
mouseEvent.countClicks()来获得鼠标事件是单击还是双击。
jdk1.3后,双击事件就不能用了,mouseEvent.countClicks()总是为1,
用getClickCount()就好了!
 
3X fatman.
你上面讲的我也知道,不过isPopupTrigger()应该是响应菜单触发键吧,只是多数平台菜单
触发按钮都是右键.
因为我是写Applet,考虑到通用性,不能用JFC,也不能用jdk1.3API.
就算能用好象也不能解决.因为当时双击鼠标时,会触发两次mouseClicked.
一次的getClickCount()为1,一次为2.
经过我的测试,当我在第一次触发mouseClicked时弹出了PopupMenu,则永远也也不会得到
getClickCount()为2的mouseClicked事件.
可能是因为在两次单击之前发生了一次焦点转移,故JAVA或windows不再将此次事件判断为双击吧?
我想了一个笨办法,就是在发生mouseClicked事件时创建一个线性来执行相应单击事件.
并设置一个双击标志isDbClick,该线程先sleep xxx毫秒.然后判断双击标志,
如果isDbClick为false则弹出PopupMenu,则否不弹出.
但是问题又来了,经过我的测试,JAVA的鼠标事件是具有平台相关性的.也就是说,用户系统
判断鼠标双击的时间可能是100毫秒,也可能是500毫秒。而我找不到办法得到这个毫秒数.[:(]
我在sun的网站也没有找到相关资料,等待高手出招。。。
BTW:怎么人气这么差?如果孙老师路过,麻烦解答一下。[:P].
 
用JB来做嘛,很方便的就可以实现了。
PS:你是不是那个轮子?
 
确实,我在编写一套自己的Java界面控件时,对单击和双击的判断也是大为头痛的,
你的实现思路就有点太麻烦了点,我再borland newsgrounp也问过类似的问题,得到
的回答是Java自身无法获取(native使用GetDoubleClickTime除外),判断鼠标双击
的标准做法就是 MouseEvent.getClickCount()。
 
多谢两位.
2 吴剑明:
JB也一样只有mouseClicked呀.怎么方便呢?
而且JB太慢了,我的赛扬600+256M跑起来还是觉得受不了,所以写Applet我还是喜欢用UltraEdit。
呵呵,我想我应该是那个轮子吧.[:)]
2 DragonPC_???:
我上次说了,用MouseEvent.getClickCount()达不到我的要求.
一是双击时会触发两次事件, 二是两次事件中我做了弹出PopupMenu之类的工作时,连双击事件都得不到.
我也觉得我的方法笨笨的,但是实在相不到好办法[:(]
 
这么久了,该结束了。
今天想起来,看了一下。原来Delphi里的机制也是一样的,当时没注意到。
看来是我的要求比较奇怪了,错怪JAVA了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
625
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部