如何确保在javafx的滚动窗格中标题栏中的节点可见

如何确保在javafx的滚动窗格中标题栏中的节点可见,javafx,autoscroll,scrollpane,Javafx,Autoscroll,Scrollpane,我有一个滚动窗格,其中有各种标题窗格,每个标题窗格都有各种文本字段作为子项。当我使用Tab键浏览整个textfield时,滚动窗格不会自动滚动,以确保控件获得焦点时可见。这是一个演示问题的程序 import java.util.Random; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.ScrollPane; import javafx.scene.

我有一个滚动窗格,其中有各种标题窗格,每个标题窗格都有各种文本字段作为子项。当我使用Tab键浏览整个textfield时,滚动窗格不会自动滚动,以确保控件获得焦点时可见。这是一个演示问题的程序

import java.util.Random;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ScrollPaneEnsureVisible extends Application {

    private static final Random random = new Random();

    @Override
    public void start(Stage primaryStage) {

        VBox root = new VBox();
        ScrollPane scrollPane = new ScrollPane();
        Pane content = new Pane();
        scrollPane.setContent(content);

        for (int i = 0; i < 3; i++) {
            TitledPane pane = new TitledPane();
            AnchorPane paneContent = new AnchorPane();
            for (int j = 0; j < 2; j++) {
                TextField text = new TextField();
                paneContent.getChildren().add(text);
                text.setLayoutX(8);
                text.setLayoutY(j*30);
            }
            pane.setCollapsible(false);
            pane.setContent(paneContent);
            pane.setLayoutY(i*100);
            content.getChildren().add(pane);
        }

        root.getChildren().add(scrollPane);

        scrollPane = new ScrollPane();
        content = new Pane();
        scrollPane.setContent(content);
        for (int i = 0; i < 3; i++) {
            TitledPane pane = new TitledPane();
            AnchorPane paneContent = new AnchorPane();
            pane.setContent(paneContent);
            pane.setPrefWidth(200);
            pane.setPrefHeight(80);
            pane.setCollapsible(false);
            pane.setLayoutY(i*100);
            content.getChildren().add(pane);
        }

        root.getChildren().add(scrollPane);


        Scene scene = new Scene(root, 300, 250);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) { launch(); }
}
import java.util.Random;
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.ScrollPane;
导入javafx.scene.control.TextField;
导入javafx.scene.control.TitledPane;
导入javafx.scene.layout.ancorpane;
导入javafx.scene.layout.Pane;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类ScrollPaneEnsureVisible扩展应用程序{
私有静态最终随机=新随机();
@凌驾
公共无效开始(阶段primaryStage){
VBox root=新的VBox();
ScrollPane ScrollPane=新的ScrollPane();
窗格内容=新建窗格();
scrollPane.setContent(内容);
对于(int i=0;i<3;i++){
TitledPane=新的TitledPane();
AnchorPane paneContent=新的AnchorPane();
对于(int j=0;j<2;j++){
TextField text=新的TextField();
paneContent.getChildren().add(文本);
text.setLayoutX(8);
文本设置布局(j*30);
}
窗格。可折叠设置(错误);
pane.setContent(paneContent);
窗格设置布局(i*100);
content.getChildren().add(窗格);
}
root.getChildren().add(滚动窗格);
scrollPane=新的scrollPane();
内容=新窗格();
scrollPane.setContent(内容);
对于(int i=0;i<3;i++){
TitledPane=新的TitledPane();
AnchorPane paneContent=新的AnchorPane();
pane.setContent(paneContent);
窗格宽度(200);
窗格高度(80);
窗格。可折叠设置(错误);
窗格设置布局(i*100);
content.getChildren().add(窗格);
}
root.getChildren().add(滚动窗格);
场景=新场景(根,300,250);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){launch();}
}


第二个标题窗格一切正常,但第一个标题窗格则不然。我需要感知可见(自动滚动滚动窗格),控制它们何时获得焦点。

这是否回答了您的问题?