2016-03-31 11 views
0

So habe ich 2 Spinner s, windVelSpinner und launchTubeSpinner. Sie haben die folgenden Aktionen auf Tasten gedrückt (Ich benutze Szene Builder): windSpinAction und launchSpinAction ist, was ich sie nannte. Hier ist die windSpinAction Methode:So fordern Sie den Fokus auf Spinner an, nachdem Sie die Eingabetaste auf einem anderen Spinner gedrückt haben

@FXML 
void windSpinAction(KeyEvent ke) { 
    if (ke.getCode().equals(KeyCode.ENTER)) { 
     launchTubeSpinner.requestFocus(); 
    } // end if statement 

Wenn ich starten Sie das Programm und klicken Sie eingeben, während der Fokus auf windVelSpinner nichts passiert. Aber wenn ich shift + gebe eingeben verschiebt es den Fokus auf launchSpinAction. Warum ist das der Fall und wie kann ich das umgehen? Danke im Voraus!

Antwort

1

Dies hat nichts mit dem Drücken shift oder nicht zu tun. Da Sie die onKeyPressed Ereignisse verwenden, löst das Ereignis auf dem ersten Spinner aus, der den zweiten Spinner Fokus erhält, während die Taste noch gedrückt wird, so erhält das zweite Spinner das Ereignis ebenfalls und das erste Spinner erhält den Fokus erneut, der das Ereignis erneut erhält, das sich ändert der Fokus auf die zweite Spinner wieder und so weiter ...

Das Ergebnis ist der Fokus endet mehr oder weniger zufällig bei einer der Spinner s.

Verwenden Sie das Ereignis onKeyReleased, das nur einmal pro Tastendruck ausgelöst wird.


Wenn Sie editierbare haben Spinner s und wollen den Fokus nach einer Benutzereingabe ändern, verwenden Sie das onAction Ereignis des editor statt das Schlüsselereignis auf den Spinner.

windVelSpinner.getEditor().setOnAction(e -> { 
    launchTubeSpinner.requestFocus(); 
}); 

(im initialize Methode)

+0

funktioniert super! Danke! – Michael