JAVA FX ScrollPane 不允许请求焦点在一个字段上

标签 java javafx focus setfocus focusable

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

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

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

Application类有一个Node属性(Node body;)里面包含一个form,这个form包含一个Field

当应用程序显示在提到的右 Pane 中时,它调用方法 requestFocus(),并且此方法(从 JavaFX Node 类覆盖)具有为上述字段请求焦点的责任(这次使用来自 JavaFX Node 类的原始 requestFocus() 方法)。

这个程序效果很好。但是,问题是当我想添加一个包含 Node 主体的 ScrollPane 时。似乎是 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
}

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

最佳答案

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

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

关于JAVA FX ScrollPane 不允许请求焦点在一个字段上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25317684/

相关文章:

java - 在一台 PC 上模拟两个 Java SE 实例

java - 容器组件如何

.net - 有没有办法在 C#.NET 中使用 TabIndex 实现通用 KeyDown 处理程序和焦点移动?

Android Webview 如何在加载时删除元素的聚焦/悬停状态?

java - 为什么子类越骑只能比父类(super class)有更弱的访问权限

java - java中如何检查一个字符串是否是回文?

java - [Microsoft][SQLServer 2000 Driver for JDBC]登录已超时

Java:按钮单击事件输出到服务器时出错

java - 等到使用 Latch 执行 Platform.runLater

javaFX:错误的合并排序动画结果