как обеспечить видимость узла в TitlePane, который находится в области прокрутки в javafx

У меня есть scrollPane, в котором есть различные TitledPane, каждая TitledPane имеет различные текстовые поля в качестве дочерних элементов. Когда я перемещаюсь по текстовому полю с помощью клавиши Tab, панель прокрутки не выполняет автоматическую прокрутку, чтобы обеспечить видимость фокуса элемента управления. Это программа, демонстрирующая проблему.

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(); }
}

Для второй титульной панели все нормально, а для первой нет. мне нужно обеспечить видимость (автопрокрутка области прокрутки), которая контролирует, когда они получают фокус.


person kato2    schedule 12.08.2013    source источник
comment
Отвечает ли это на ваш вопрос? Как прокрутить до сделать узел в содержимом ScrollPane видимым?   -  person Sergey Grinev    schedule 23.11.2019