2

我正在开发一个 JavaFX 客户端。它是一个两窗格的软件。左窗格是一个列表,显示了为客户端开发的几个应用程序(具有不同的布局)(Application_1Application_2等)。右侧窗格是Application_N显示的位置。

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

BorderPane -> Application(我开发的应用程序类)。

该类Application有一个Node属性(Nodebody;),它包含一个表单,这个表单包含一个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
}

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

4

1 回答 1

0

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

完成后,您可以在 ScrollPaneBehavior 中更改焦点窃取行为

于 2016-05-02T19:02:06.573 回答