2015-11-12 1 views
0

Veuillez regarder l'exemple de code suivant. Démarrez l'application et concentrez l'un des champs de texte. Maintenant, cliquez sur le menu. L'accent est toujours conservé sur le TextField. Cependant, notre TextField déclenche une communication de sa valeur sur la perte de focus. Comment puis-je implémenter le fait que cliquer sur un élément de menu ou de barre d'outils provoque une perte de focus sur le TextField?JavaFX Focus change sur TextField lors de l'ouverture du menu

public class FocusApp extends Application 
{ 

    @Override 
    public void start(Stage primaryStage) throws Exception 
    { 
     TextField l_text1 = new TextField("TextField 1"); 
     TextField l_text2 = new TextField("TextField 2"); 
     l_text1.focusedProperty().addListener((a,b,c) -> { 
      System.out.println("Focus change on TextField 1"); 
     }); 
     l_text2.focusedProperty().addListener((a,b,c) -> { 
      System.out.println("Focus change on TextField 2"); 
     }); 

     MenuBar l_menuBar = new MenuBar(); 
     l_menuBar.setFocusTraversable(true); 
     Menu l_menu = new Menu("_Menu"); 
     l_menu.getItems().add(new MenuItem("_Item")); 
     l_menuBar.getMenus().add(l_menu); 
     VBox l_vbox = new VBox(l_menuBar, l_text1, l_text2); 
     primaryStage.setScene(new Scene(l_vbox)); 
     primaryStage.show(); 
    } 



    public static void main(String[] args) 
    { 
     FocusApp.launch(args); 
    } 
} 

Répondre

1

Je pense que vous demandez que vous souhaitiez que le focus s'éloigne du champ de texte lorsque l'utilisateur active le menu.

Vous pouvez le faire avec

l_menu.setOnShowing(e -> l_menuBar.requestFocus()); 
+0

Il fonctionne, je vous remercie! – WhiteAntelope