Я разрабатываю клиент JavaFX. Это двухпанельное программное обеспечение. Левая панель представляет собой список, в котором показаны несколько приложений (с разными макетами), разработанных для клиента (Application_1
, Application_2
и т. д.). На правой панели отображается Application_N
.
Приложение, показанное на правой панели программного обеспечения, имеет следующую иерархию классов Java:
BorderPane -> Application
(класс приложений, разработанный мной).
Класс Application
имеет атрибут Node
(тело Node
), который содержит форму, а эта форма содержит атрибут Field
.
Когда приложение отображается на указанной правой панели, оно вызывает метод requestFocus()
, и этот метод (который перезаписывается из класса JavaFX Node
) должен запрашивать фокус (используя на этот раз исходный метод requestFocus()
из класса JavaFX Node
) для указанного поля.
Эта процедура работает хорошо. Однако проблема заключается в том, что я хочу добавить ScrollPane
, который будет содержать тело Node
. Похоже, что ScrollPane
запрещает метод фокуса запроса для поля в теле.
Приведенный ниже код взят из Application.java.
Node body;
body = getBody(); // getBody() builds the UI of this application
scrollPanel = new ScrollPane();
scrollPanel.setHbarPolicy(ScrollBarPolicy.AS_NEEDED);
scrollPanel.setVbarPolicy(ScrollBarPolicy.AS_NEEDED);
scrollPanel.setFitToWidth(true);
scrollPanel.setFitToHeight(true);
scrollPanel.getStyleClass().add("application");
scrollPanel.setContent(body);
this.setCenter(scrollPanel);
...
И теперь, когда приложение будет отображаться, оно выполняет следующий код:
public void create(){
requestFocus();
}
@Override
public void requestFocus(){
accountField.requestFocus(); //using the method from the JavaFX node class
}
Я повторяю, что проблема возникает, когда я помещаю панель прокрутки в свою иерархию. Буду признателен, если у кого-то есть комментарий или решение этой проблемы. Спасибо.