我正在开发一个JavaFX客户端。这是一个双窗格软件。左侧窗格是一个列表,显示为客户端(Application_1
,Application_2
等)开发的多个应用程序(具有不同的布局)。右侧窗格是显示Application_N
的位置。
软件右窗格中显示的应用程序具有以下java类层次结构:
BorderPane -> Application
(由我开发的应用程序类)。
Application
类有一个Node
属性(Node
正文;),其中包含一个表单,此表单包含Field
。
当在提到的右窗格中显示应用程序时它调用方法requestFocus()
,并且此方法(从JavaFX Node
类覆盖)有义务请求焦点(使用此方法)为上述字段计时来自JavaFX requestFocus()
类的原始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
}
我再说一遍,当我将滚动窗格放入层次结构时,问题就出现了。如果有人对此发表评论或解决方案,我将不胜感激。谢谢。
答案 0 :(得分:0)
我发现scrollPane不完整且有问题。 在这个阶段,我的解决方案是复制openjfx ScrollPane [Behavior | Skin]来源并制作必要的黑客攻击。
完成后,您可以更改ScrollPaneBehavior中的焦点窃取行为