文本字段中的请求焦点不起作用
我使用JavaFX 2.1,并使用FXML创建了GUI,在这个GUI的控制器中,我添加了。myTextField.requestFocus();
但我总是把焦点放在另一个控件上。
我使用JavaFX 2.1,并使用FXML创建了GUI,在这个GUI的控制器中,我添加了。myTextField.requestFocus();
但我总是把焦点放在另一个控件上。
在控件尚未准备好处理焦点时。initialize()
你可以试试下一个技巧:
@Override
public void initialize(URL url, ResourceBundle rb) {
Platform.runLater(new Runnable() {
@Override
public void run() {
tf.requestFocus();
}
});
}
对于棘手的复杂应用程序(如Pavel_K注释中),您可能需要重复此例程几次,并在下一个例程调用方法行:
private void requestFocusOrDieTrying(Node node) {
Platform.runLater(() -> {
if (!node.isFocused()) {
node.requestFocus();
requestFocusOrDieTrying(node);
}
});
}
请注意,这是未记录的方法,如果将来的Java版本中某些内容发生更改或中断,则为重复添加限制可能是明智的,以避免无休止的循环。比整个应用程序失去焦点更好。:)
具有所述阈值的示例:
@Override
public void requestFocus() {
requestFocus( getNode(), 3 );
}
private void requestFocus( final Node node, final int max ) {
if( max > 0 ) {
runLater(
() -> {
if( !node.isFocused() ) {
node.requestFocus();
requestFocus( node, max - 1 );
}
}
);
}
}
答案与@Sergey格里涅夫完全相同。确保您的 Java 版本是最新的(JDK 1.8 或更高版本)。
Platform.runLater(()->myTextField.requestFocus());