Redimensionamento automático ScrollPane
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?
Solução
As barras de rolagem não aparecerão porque
- Você tem a política definida para
ScrollBarPolicy.AS_NEEDED
- 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