JavaFX ScrollPane内容不显示:如何实现可滚动面板列表?
解决JavaFX ScrollPane为空的问题
核心问题是你创建了承载卡片的cardContainer,但从未将它设置为ScrollPane的内容,这就是ScrollPane一直为空的原因。另外你的卡片标签只显示固定前缀,没有传入实际参数值,也需要修正。
修正后的代码
ManagerSceneController 代码
public class ManagerSceneController { @FXML private ScrollPane ScrollingContainer; public void initialize() { FillScrollPane(); } public void FillScrollPane() { System.out.println("Führe aus"); VBox cardContainer = new VBox(10); cardContainer.setPadding(new Insets(10)); for (int i = 1; i <= 50; i++) { // TO DO: Replace with actual loading VBox card = CardComponent.createCard("Webseite"+i, "Username"+i, "Password"+i); cardContainer.getChildren().add(card); System.out.println(card); System.out.println("Number of children in cardContainer: " + cardContainer.getChildren().size()); System.out.println("Erfolgreich ausgeführt"); } // 关键:将cardContainer设置为ScrollPane的内容 ScrollingContainer.setContent(cardContainer); // 这些配置放在循环外即可,无需重复执行 ScrollingContainer.setFitToWidth(true); ScrollingContainer.setFitToHeight(true); } }
CardComponent 代码(修正标签内容)
public class CardComponent { public static VBox createCard(String website, String username, String password) { // 将参数值拼接到标签文本,否则仅显示固定前缀 Label websiteLabel = new Label("Website: " + website); Label usernameLabel = new Label("Username: " + username); Label passwordLabel = new Label("Password: " + password); VBox card = new VBox(10); card.getChildren().addAll(websiteLabel, usernameLabel, passwordLabel); card.setPadding(new Insets(10)); card.setStyle("-fx-border-color: black; -fx-border-width: 1px;"); return card; } }
额外说明
- ScrollPane必须通过
setContent(Node)方法设置内部显示节点,否则无论添加多少子元素都不会显示内容。 - 循环内重复执行
setFitToWidth和setFitToHeight属于冗余操作,放在循环外执行一次即可。 - 确保SceneBuilder中ScrollPane的
fx:id和控制器中的ScrollingContainer完全一致(大小写敏感),这也是常见的排查点。
内容的提问来源于stack exchange,提问作者ByGoalZ
相关产品推荐
相关产品推荐

