JAVA FX ScrollPane不允许在场上请求焦点

时间:2014-08-14 21:12:20

标签: java javafx focus setfocus focusable

我正在开发一个JavaFX客户端。这是一个双窗格软件。左侧窗格是一个列表,显示为客户端(Application_1Application_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
}

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

1 个答案:

答案 0 :(得分:0)

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

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