Bonjour,

J'ai une fenetre secondaire (JPanel) contenant une JCombo Box liste, en la déroulant je lance une longue action (une requete à un serveur): pendant cette action je voudrais que la fenetre soit modale (pas accessible à l'utilisateur ) et le cursor en WAIT_CURSOR . En même temps la fenetre principale ne devrait pas être grisée.


J'ai essayé avec ça mais le cursor n'apparait en wait qu' aprés l'exécution de l'action pas pendant et il reste bloquée même quand je ferme la fenetre:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public  static void startWorker(final Runnable runnable,final Component window,final SecBrowserHandler browser) {
	      SwingWorker swingWorker = new SwingWorker() {
	          public Object construct() {
	              try { 
	                 setWaitCursor(true,window,browser);
	                 runnable.run();
	              } catch (Exception e) {
	            	  setWaitCursor(false,window,browser);
	            	  //showExceptionDialog(e);
	              } finally {
	                 setWaitCursor(false,window,browser);
	              }
	              return null;
	          }
	      };
	      swingWorker.start("");
	  }
 
	  public static void setWaitCursor(boolean waitCursor, Component window,SecBrowserHandler browser) {
	      if (browser!=null)
	      {
	    	  startModality();
	      }
	      else
	      { 
		    if (!waitCursor) window.setCursor(null);
	        else window.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
	        glassPane_.setVisible(waitCursor);
	      }
	  }

L'appel se fait comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 public void initWeeklyScheduleList()
  {
    weeklyListModel_.removeAllElements();
    weeklyScheduleNameListGadget_.removeAllItems();
 
     AciModalityManager.startWorker(new Runnable() {
 
     public void run() {
 
       String[] scheduleIds = null;
 
       if (commonWeeklyScheduleManaged_)
       {  
         scheduleIds = SecCalendarManager.getInstance().getCommonWeeklyScheduleNameList(true);   
 
       }
       else
       {
         scheduleIds = SecCalendarManager.getInstance().getUserWeeklyScheduleNameList(owner_,false);
 
       }
 
 
//  NMUes13771
   // weeklyListModel_.addElement(SecBabel.getString("sec.schedule.createNewWS"));
 
       if (scheduleIds != null)
       { 
           if (commonWeeklyScheduleManaged_)
           {  
 
    	     for (int i = 0; i < scheduleIds.length ; i++ )
    	     {
    	       weeklyListModel_.addElement(scheduleIds[i]);
    	     }
           }
           else
           {
 
    	      initAttacheDetachedWslist(scheduleIds);
 
             for (int j=0;j<scheduleIdattached_.size();j++)
             {
                weeklyListModel_.addElement(scheduleIdattached_.elementAt(j));
             }
             for (int j=0;j<scheduleIdnotattached_.size();j++)
             {
                weeklyListModel_.addElement(scheduleIdnotattached_.elementAt(j));
              }
            }
 
          }
        }
      },commonWeeklySchedulePanel_,SecBrowserHandler.getCurrentBrowser());
 
 
    weeklyListModel_.setSelectedItem(weeklyListModel_.getElementAt(0));
    weeklyListModel_.addElement(SecBabel.getString("sec.schedule.createNewWS"));
 
  }
Merci