Если обрабатывать событие отпускания мыши, это работает: (. DoFocus позволяет requestFocus обработку только тогда, когда выбор вкладки изменяется до, в противном случае он пинает в каждый раз, когда вы щелкаете где-нибудь в TabPane)
final SimpleBooleanProperty doFocus = new SimpleBooleanProperty(false);
tabPane.setOnMouseReleased(new EventHandler<Event>() {
@Override
public void handle(Event event) {
if (!doFocus.get()) {
return;
}
doFocus.set(false);
switch (tabPane.selectionModelProperty().getValue().selectedIndexProperty().intValue()) {
case 0: tf1b.requestFocus(); break;
case 1: tf2a.requestFocus(); break;
default: break;
}
}
});
tabPane.selectionModelProperty().getValue().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable,
Number oldValue, Number newValue) {
doFocus.set(true);
}
});
Когда TabPane имеет фокус, можно изменить вкладку с помощью клавиш курсора, и там TextFields также не будут получать фокус с помощью подхода на основе выбора. Возможно, это тоже нужно обработать, если вам это нужно.
(В последнее время у меня была аналогичная проблема. Я заметил, что TabPane сразу же переводит вкладки, когда вы нажимаете кнопку мыши. Я предполагаю, что запросы на основе подхода на основе выбора фокусируются на TextField сразу после мыши, но Продолжающаяся мышь вниз переводит фокус обратно в TabPane. Или, возможно, даже одно событие мыши, которое меняет выбор, заставляет фокус вернуться к TabPane. Однако мои предположения относительно причин могут быть неверными, поскольку я новичок в JavaFX .)
EDIT: Это обращение, конечно, не оптимально. Например, если вы измените вкладки с помощью клавиш, функция doFocus будет включена, а затем щелчок в любом месте TabPane вызовет вызов requestFocus. Я думал, что это нужно упомянуть.
ли обертывание [requestFocus] (http://docs.oracle.com/ javafx/2/api/javafx/scene/Node.html # requestFocus% 28% 29) вызвать [Platform.runLater] (http://docs.oracle.com/javafx/2/api/javafx/application/Platform. html # runLater% 28java.lang.Runnable% 29) исправить вашу проблему? – jewelsea
Я [открыл вопрос] (https://javafx-jira.kenai.com/browse/RT-35765) за это вы можете смотреть и голосовать. –