JAVA FX ScrollPane不允许请求关注一个字段



我正在开发一个JavaFX客户端。它是一个双面板软件。左窗格是一个列表,显示了为客户端(Application_1, Application_2等)开发的几个应用程序(具有不同的布局)。右窗格是显示Application_N的地方。

在软件的右窗格中显示的应用程序具有以下java类层次结构:

BorderPane -> Application(自己开发的应用类)。

Application类有一个Node属性(Node body;),它包含一个表单,而这个表单包含一个Field

当应用程序在提到的右窗格中显示时,它调用方法requestFocus(),并且该方法(从JavaFX Node类重写)有责任为提到的字段请求焦点(使用这次来自JavaFX Node类的原始requestFocus()方法)。

这个程序运行良好。然而,问题是当我想添加一个ScrollPane,将包含Node的身体。似乎ScrollPane不允许对body中的字段使用request focus方法。

下面的代码来自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
}

我重复一遍,当我将滚动窗格放在层次结构中时,问题发生在。如果有人对此有评论或解决方案,我将不胜感激。谢谢你。

我发现scrollPane不完整并且有bug。在这个阶段,我的解决方案是复制openjfx ScrollPane[Behavior|Skin]源代码,并进行必要的修改。

完成后,你可以在ScrollPaneBehavior

中更改焦点窃取行为

最新更新