2012-10-20 1 views
4

Je développe une application rcp. J'utilise une fenêtre de swt-up Novocode. Je dois afficher un BaloonWindow sur le bouton click.but chaque fois que je clique sur le bouton à chaque fois créer une nouvelle fenêtre de ballonAfficher un seul Shell si le shell, s'il était précédemment ouvert, n'affiche pas un autre shell

Mon code est ci-dessous

public Object execute(ExecutionEvent event) throws ExecutionException { 
    try { 
     BalloonWindow baloonWindow=new BalloonWindow(HandlerUtil.getActiveWorkbenchWindow(event).getShell(),SWT.ON_TOP|SWT.TOOL|SWT.CLOSE); 
     baloonWindow.setText("XYZ");    
     baloonWindow.setAnchor(SWT.RIGHT|SWT.TOP); 
     baloonWindow.setLocation(1290, 90); 
     Composite c = baloonWindow.getContents(); 
     String array[]=new String[2];    
     array[0]="A"; 
     array[1]="B";      
     c.setLayout(new FillLayout()); 
     TableViewer t=new TableViewer(c,SWT.NONE); 
     t.setContentProvider(new ArrayContentProvider()); 
     t.setInput(array); 
     c.pack(true); 
     baloonWindow.setVisible(true); 

    } catch (Exception e) {   
     e.printStackTrace(); 
    } 
    return null; 
} 

tout le monde peut aider me.how à montrer une seule fenêtre de ballon Si une fenêtre de ballon est ouverte, alors une autre fenêtre de ballon ne devrait pas être autorisée à s'ouvrir ou il ne devrait rester qu'une seule fenêtre de ballon ouverte à un moment donné.

+1

Je ne sais rien de la technologie que vous utilisez, mais je vois dans votre code que vous ne cachez aucune fenêtre "baloon" précédente lorsque vous en créez une nouvelle. – atas

+0

c'est ce que je veux faire. Je n'ai qu'un seul ballon. à chaque clic sur un bouton, un nouveau ballon est ouvert, il crée donc une pile de bulles. Je n'ai trouvé aucune méthode pour masquer le ballon, par exemple 'hideBalloon()' – Abhit

+0

Quelque chose comme "setVisible (false)" peut-être? – atas

Répondre

0

Je ne suis pas sûr d'avoir compris votre objectif ultime, voici donc deux possibilités:


Première (au plus un BalloonWindow à la fois)

Créer un staticboolean champ isOpen dans votre classe contenant la méthode execute(). Définissez cette variable sur true une fois que vous avez créé BalloonWindow et vérifiez cette variable chaque fois que vous entrez execute(). Si c'est false, créez un nouveau BalloonWindow, s'il s'agit de true, return.


deuxième (fermer le BalloonWindow)

Le BalloonWindow présente une méthode open(). Utilisez cette méthode pour l'ouvrir au lieu de setVisible(true). Si vous voulez fermer le BalloonWindow, appelez simplement close(). setVisible(false) aurait le même effet visuel (la fenêtre a disparu), mais il serait toujours là (seulement invisible). close ferme vraiment la fenêtre.

+0

Je veux afficher un ballonwindow à la fois si une autre fenêtre baloon est ouverte son ne crée pas une autre ballonwindow. Si aucune fenêtre baloon n'est ouverte alors créez ou ouvrez une nouvelle baloonwindow – Abhit

+0

@Abhit Puis utilisez la première possibilité. – Baz

+0

@Abhit S'il vous plaît accepter et upvote cette réponse, si elle a résolu votre problème. Si non, veuillez clarifier. – Baz