Pergunta

Quero redimensionar o ScrollPane para caber no componente pai.Eu testei este código:

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;


public class MainApp extends Application {

    @Override
    public void start(Stage stage) throws Exception {

        BorderPane bp = new BorderPane();
        bp.setPrefSize(600, 600);
        bp.setMaxSize(600, 600);
        bp.setStyle("-fx-background-color: #2f4f4f;");

        VBox vb = new VBox(bp);

        ScrollPane scrollPane = new ScrollPane(vb);
        scrollPane.setFitToHeight(true);
        scrollPane.setFitToWidth(true);

        scrollPane.setHbarPolicy(ScrollBarPolicy.AS_NEEDED);
        scrollPane.setVbarPolicy(ScrollBarPolicy.AS_NEEDED);

        Scene scene = new Scene(scrollPane);

        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Mas como você pode ver, não vejo barras de rolagem em árvore.Há algo errado no meu código?

enter image description here

Foi útil?

Solução

As barras de rolagem não aparecerão porque

  1. Você tem a política definida para ScrollBarPolicy.AS_NEEDED
  2. A largura e a altura das barras de rolagem são automaticamente redimensionadas para o seu contêiner, que, neste caso, é o seu Vbox redimensionável.

Para corrigir isso, você pode remover setFitToHeight e setFitToWidth e deixe-os como falsos.

Observe que ScrollBarPolicy também poderia ser definido como ALWAYS em oposição a AS_NEEDED, que manterá as barras de rolagem mesmo quando a janela for expandida.

Consulte aqui para obter mais informações usando ScrollPane

API ScrollPane:definirFitToHeight

    public class MainApp extends Application {

        @Override
        public void start(Stage stage) throws Exception {

            BorderPane bp = new BorderPane();
            bp.setPrefSize(600, 600);
            bp.setMaxSize(600, 600);
            bp.setStyle("-fx-background-color: #2f4f4f;");

            VBox vb = new VBox(bp);

            ScrollPane scrollPane = new ScrollPane(vb);
            //scrollPane.setFitToHeight(true);
            //scrollPane.setFitToWidth(true);

            scrollPane.setHbarPolicy(ScrollBarPolicy.ALWAYS);
            scrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);

            Scene scene = new Scene(scrollPane);

            stage.setScene(scene);
            stage.show();
        }

        public static void main(String[] args) {
            launch(args);
        }
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top