2009-01-14 9 views
17

Pour ouvrir une boîte de dialogue modale, vous devez passer une fenêtre parente et passer les indicateurs nécessaires pour que la boîte de dialogue soit bien sûr modale. Selon l'endroit où vous vous trouvez dans l'infrastructure Eclipse, trouver cette fenêtre parente n'est pas toujours facile.Comment puis-je obtenir la fenêtre du plan de travail pour ouvrir une boîte de dialogue modale dans un projet basé sur Eclipse?

Comment accéder à la fenêtre parente?

Répondre

20

D'un point de vue ou un éditeur (cette partie est facile):

this.getSite().getWorkbenchWindow().getShell() 

De ailleurs, accéder à une vue ou un éditeur et comme ci-dessus. Si vous vous trouvez dans une classe où vous n'avez pas accès à une vue ou un éditeur, vous ne voulez probablement pas appeler de code UI, mais si vous voulez vraiment vous tirer dans le pied:

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell() 
0

pas tout à fait exactement ce que vous voulez faire, mais vous devrez peut-être utiliser SWT.APPLICATION_MODAL, SWT.DIALOG_TRIM etc. lors de la création de votre boîte de dialogue afin d'en faire un dialogue modal (mais peut-être ce n'est pas de quoi parlait ta question). Pour plus d'informations, voir link.

+0

Oui, ça aussi. Mais ma question portait plus spécifiquement sur la découverte de la coquille de la fenêtre de l'établi. Je l'ai fait il y a 6 mois et j'avais oublié entre temps je pensais ajouter le titre de la connaissance à stackoverflow – Tirno

+0

@Tirno - Mes réponses les plus mises en avant sur StackOverflow ne sont que des notes que j'ai écrites pour moi-même que je trouverai via Google mois ou années plus tard quand j'aurai exactement la même question à nouveau. – ArtOfWarfare

27

Le morceau de code de la réponse précédente fonctionnera. Cependant, gardez à l'esprit que vous ne pouvez ouvrir votre boîte de dialogue qu'à partir du thread de l'interface utilisateur. Si vous ouvrez la boîte de dialogue à partir d'un thread différent, par ex. un processus d'arrière-plan, vous devez faire quelque chose comme ceci:

PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { 
    public void run() { 
     Shell activeShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); 
    } 
}); 

Sinon, vous obtiendrez une exception lors de la création de la boîte de dialogue.

+0

Bien sûr, j'aurais dû ajouter cela. Qui est plus du même problème - Vous devez savoir où trouver cette fonction "getWorkbench()". – Tirno

Questions connexes