???
各位大虾???????程序在处于等待状态时,不是控件的ENABLED属性为FALSE(不好看),而拒绝鼠标单击事件(鼠标变为WAIT_CURSOR时,一样可以点击),可以屏蔽吗?有什么好办法吗??

解决方案 »

  1.   

    有两种办法,一种比较简单的就是跳出一个模态对话框,显示请等待。
    另一种就是自己接获事件,有一些代码你参考一下吧:
    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();
            }
      

  2.   

    ??
    我不是已经移动到JAVA板块了吗?怎么还是“所属论坛:  Visual C++ ”??
    pentax()兄:
    上面的代码放哪里呢?
    鼠标点击时间处理里就来不及了!放别处又没触发过程!
      

  3.   

    上面的代码就是处理模态的,你可以参照这个代码写一个函数,当要进入等待状态时就调用这个函数,截获事件处理线程,任何鼠标事件都return,不让它继续向下分发,具体我也没做过,好像VC里有接获事件的,但是Java里讲的好像没见过,这是模态对话框里类似的代码;其实加一个等待对话框时比较常用的,否则用户会认为死机了。就像微软的界面标准好像是等待几秒就谈对话框,时间再长就放进度表。
    还有一个比较笨的但是容易实现的办法,就是设一个全局标志,当要进入等待状态时把它设为true,然后再每个要处理的鼠标事件中判断这个标志,如果为真才能做处理。