- Je utiliser JavaFX 2.1 et j'ai créé interface graphique à l'aide de FXML, dans le contrôleur de l'interface utilisateur graphique, j'ai ajouté myTextField.requestFocus();.
Mais je reçois toujours le focus dans l'autre contrôle.
Difficile pour les applications les plus complexes (comme Pavel_K a dans les commentaires) vous pouvez répéter cette routine plusieurs fois et d'appeler la méthode de la ligne suivante:
Remarque c'est sans papiers approche et il peut être judicieux d'ajouter une limite pour les répétitions pour éviter la boucle infinie si quelque chose a changé ou sont tombés dans les futures versions de Java. Mieux vaut perdre de vue qu'un ensemble de l'application. 🙂
cela fonctionne pour moi, Merci! J'ai eu un peu le problème lié, mon TextArea a refusé de faire le focus par programme, même si le Stade était visible et active et le thread en cours d'exécution a été le JavaFX Application thread. Mais si j'ai suivi l'exemple et en attente d'une nouvelle Runnable il a travaillé. Vraiment étrange, je n'ai pas de mots pour cela. Cela ne semble plus fonctionner avec JavaFX 8. tf == null est encore vrai à l'instant initialize s'exécute. cela signifie qu'il ya une erreur dans le FXML: vérifiez @FXML annotation, "fx:" id de la balise et de l'orthographe, de la variable à la fois. Tous @FXML-ed contrôles ne doit pas être nul à initialize() temps. Sinon, qu'en un point en ayant initialize() méthode? Vous avez raison, merci pour la réponse rapide. Je dois avoir mal lu, la lecture des tutoriels.
Cela peut se produire lorsque la Scène de la propriété pour que le Nœud n'est pas encore fixé.
Hélas, la scène de la propriété peut prendre un "long" moment pour être ensemble.
Le nœud enfant de la scène de propriété gal lorsqu'une scène est d'abord créé, et aussi, lorsque des éléments sont ajoutés à certains parents, comme un TabPane (bizarrement, certains parents semblent immunisés contre, je ne sais pas pourquoi).
La bonne stratégie, qui a toujours fonctionné pour moi :
if(myNode.scene)==null{//listen for the changes to the node's scene property,//and request focus when it is set}else{
myNode.requestFocus()}
J'ai une pratique de Kotlin fonction d'extension qui le fait.
fun Node.requestFocusOnSceneAvailable(){if(scene ==null){
val listener = object :ChangeListener<Scene>{
override fun changed(observable:ObservableValue<out Scene>?, oldValue:Scene?, newValue:Scene?){if(newValue !=null){
sceneProperty().removeListener(this)
requestFocus()}}}
sceneProperty().addListener(listener)}else{
requestFocus()}}
Vous pouvez ensuite appeler à partir de votre code comme suit :
Au moment de
initialize()
les contrôles ne sont pas encore prêts à traiter le focus.Vous pouvez essayer l'astuce suivante:
Difficile pour les applications les plus complexes (comme Pavel_K a dans les commentaires) vous pouvez répéter cette routine plusieurs fois et d'appeler la méthode de la ligne suivante:
Remarque c'est sans papiers approche et il peut être judicieux d'ajouter une limite pour les répétitions pour éviter la boucle infinie si quelque chose a changé ou sont tombés dans les futures versions de Java. Mieux vaut perdre de vue qu'un ensemble de l'application. 🙂
J'ai eu un peu le problème lié, mon
TextArea
a refusé de faire le focus par programme, même si le Stade était visible et active et le thread en cours d'exécution a été le JavaFX Application thread. Mais si j'ai suivi l'exemple et en attente d'une nouvelleRunnable
il a travaillé. Vraiment étrange, je n'ai pas de mots pour cela.Cela ne semble plus fonctionner avec JavaFX 8.
tf == null
est encore vrai à l'instantinitialize
s'exécute.cela signifie qu'il ya une erreur dans le FXML: vérifiez @FXML annotation, "fx:" id de la balise et de l'orthographe, de la variable à la fois. Tous @FXML-ed contrôles ne doit pas être nul à
initialize()
temps. Sinon, qu'en un point en ayantinitialize()
méthode?Vous avez raison, merci pour la réponse rapide. Je dois avoir mal lu, la lecture des tutoriels.
OriginalL'auteur Sergey Grinev
Si vous requestFocus(); APRÈS l'initialisation de la scène, il va fonctionner!
Comme ceci:
J'espère que cette aide. 🙂
OriginalL'auteur codepleb
La même réponse @Sergey Grinev. Assurez-vous que votre version de java est à jour (JDK 1.8 ou plus tard).
OriginalL'auteur Sedrick
Cela peut se produire lorsque la Scène de la propriété pour que le Nœud n'est pas encore fixé.
Hélas, la scène de la propriété peut prendre un "long" moment pour être ensemble.
Le nœud enfant de la scène de propriété gal lorsqu'une scène est d'abord créé, et aussi, lorsque des éléments sont ajoutés à certains parents, comme un TabPane (bizarrement, certains parents semblent immunisés contre, je ne sais pas pourquoi).
La bonne stratégie, qui a toujours fonctionné pour moi :
J'ai une pratique de Kotlin fonction d'extension qui le fait.
Vous pouvez ensuite appeler à partir de votre code comme suit :
Peut-être quelqu'un voudrais le traduire en Java.
OriginalL'auteur nickthecoder