2017-08-21 4 views
0

J'ai un problème avec accent sur Vaadin. Le problème se produit lorsque j'ouvre une nouvelle fenêtre (boîte de dialogue) par exemple. cliquez sur le bouton:Vaadin obtiennent l'élément concentré

new Window(caption, component); 

Lorsque la fenêtre est fermée, la méthode close() est exécutée. Sa mise en œuvre de la classe de fenêtre:

public void close() { 
    UI uI = getUI(); 

    // Don't do anything if not attached to a UI 
    if (uI != null) { 
     // focus is restored to the parent window 
     uI.focus(); 
     // window is removed from the UI 
     uI.removeWindow(this); 
    } 
} 

Comme le montre, l'accent est mis à l'interface utilisateur au lieu de composant qui a provoqué une fenêtre ouverte. Existe-t-il un moyen de définir le focus du composant sur, par exemple, bouton qui a causé la fenêtre ouverte? Je suis à la recherche d'une solution générique. J'ai une solution de contournement dans laquelle j'étend la classe de fenêtre et crée le champ pour le composant. Après la création de la fenêtre, je définis le champ du composant sur celui qui a provoqué l'ouverture de la fenêtre. Mais comme je l'ai dit - je le vois comme une solution de contournement.

Répondre

0

Je ne suis pas au courant d'un moyen générique de gérer le focus avec le code côté serveur. J'utilise 2 approches pour le contrôle du focus après fermeture de la fenêtre:

  1. Conserver Focusable comme champ dans l'extension de la classe fenêtre et se concentrer sur près
  2. utilisation proche auditeur et mise au point composant suivant il

Approche 2 peut être étendu pour des cas plus complexes également. Par exemple, les boîtes de dialogue de confirmation peuvent avoir un écouteur pour gérer les réponses oui et non et vous pouvez mettre au point un composant différent en fonction de la réponse.

Pour que les programmes d'écoute des raccourcis fonctionnent, il est bon d'avoir au moins le focus sur l'objet de l'interface utilisateur.

Vous devez également être conscient du bug Vaadin #5891 qui risque de perturber le réglage de la fermeture de la fenêtre.

+0

Je l'ai mis en œuvre de la même manière que vous l'avez décrit au 1er point. Mais ce n'est malheureusement pas générique et nécessite beaucoup de changements dans les composants qui utilisent Windows. – Adam