javafx滚动窗格不允许请求聚焦于某个字段
我正在开发一个JavaFX客户端。这是一个双窗格软件。左窗格是一个列表,其中显示了为客户端开发的几个应用程序(具有不同的布局)(Application_1
,Application_2
,等等)。右窗格是显示Application_N
的地方
软件右窗格中显示的应用程序具有以下java类层次结构:
BorderPane -> Application
(我开发的应用程序类)
Application
类有一个Node
属性(Node
body;)它包含一个表单,而这个表单包含一个Field
当应用程序显示在所提到的右窗格中时,它调用方法requestFocus()
,并且该方法(从JavaFX Node
类重写)有责任为所提到的字段请求焦点(这次使用JavaFX Node
类中的原始requestFocus()
方法)
这个程序很有效。然而,问题是当我想添加一个ScrollPane
时,它将包含Node
主体。似乎ScrollPane
不允许将请求焦点方法用于正文中的字段
下面编写的代码来自应用程序。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
}
我重复一下,当我将滚动窗格放入我的层次结构时,问题正在发生。如果有人对此有意见或解决方案,我将不胜感激。谢谢
# 1 楼答案
我发现滚动窗格不完整,而且安装了窃听器。 在这个阶段,我的解决方案是复制openjfx ScrollPane[Behavior | Skin]源代码,并进行必要的黑客攻击
完成后,您可以更改ScrollPaneBehavior中的焦点窃取行为