当前位置: 技术问答>java相关
如何在FRAME(包含JTREE、JBUTTON等)处于等待状态时屏蔽各组件的鼠标单击事件?(检索不到相应答案)
来源: 互联网 发布时间:2015-09-17
本文导语: 请赐教! | 有两种办法,一种比较简单的就是跳出一个模态对话框,显示请等待。 另一种就是自己接获事件,有一些代码你参考一下吧: if (SwingUtilities.isEventDispatchThread()) { EventQ...
请赐教!
|
有两种办法,一种比较简单的就是跳出一个模态对话框,显示请等待。
另一种就是自己接获事件,有一些代码你参考一下吧:
if (SwingUtilities.isEventDispatchThread()) {
EventQueue theQueue =
getToolkit().getSystemEventQueue();
while (isVisible()) {
/*AWTEvent event = theQueue.getNextEvent();
Object source = event.getSource();
if (event instanceof ActiveEvent) {
((ActiveEvent)event).dispatch();
} else if (source instanceof Component) {
break;
} else if (source instanceof MenuComponent) {
((MenuComponent)source).dispatchEvent(
event);
*/在这里处理相关事件,是否让其分发
} else {
System.err.println(
"Unable to dispatch: " + event);
}
}
} else {
while (isVisible()) {
wait();
}
另一种就是自己接获事件,有一些代码你参考一下吧:
if (SwingUtilities.isEventDispatchThread()) {
EventQueue theQueue =
getToolkit().getSystemEventQueue();
while (isVisible()) {
/*AWTEvent event = theQueue.getNextEvent();
Object source = event.getSource();
if (event instanceof ActiveEvent) {
((ActiveEvent)event).dispatch();
} else if (source instanceof Component) {
break;
} else if (source instanceof MenuComponent) {
((MenuComponent)source).dispatchEvent(
event);
*/在这里处理相关事件,是否让其分发
} else {
System.err.println(
"Unable to dispatch: " + event);
}
}
} else {
while (isVisible()) {
wait();
}
|
上面的代码就是处理模态的,你可以参照这个代码写一个函数,当要进入等待状态时就调用这个函数,截获事件处理线程,任何鼠标事件都return,不让它继续向下分发,具体我也没做过,好像VC里有接获事件的,但是Java里讲的好像没见过,这是模态对话框里类似的代码;其实加一个等待对话框时比较常用的,否则用户会认为死机了。就像微软的界面标准好像是等待几秒就谈对话框,时间再长就放进度表。
还有一个比较笨的但是容易实现的办法,就是设一个全局标志,当要进入等待状态时把它设为true,然后再每个要处理的鼠标事件中判断这个标志,如果为真才能做处理。
还有一个比较笨的但是容易实现的办法,就是设一个全局标志,当要进入等待状态时把它设为true,然后再每个要处理的鼠标事件中判断这个标志,如果为真才能做处理。