有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javafx滚动窗格不允许请求聚焦于某个字段

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

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

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

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

  1. # 1 楼答案

    我发现滚动窗格不完整,而且安装了窃听器。 在这个阶段,我的解决方案是复制openjfx ScrollPane[Behavior | Skin]源代码,并进行必要的黑客攻击

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