如何使用控制器在 fxml 上创建滚动窗格

How to create a scrollpane on fxml using controller

我想从控制器创建一个滚动窗格和按钮并在 fxml 中显示它,这可能吗?这是我的代码,但它不起作用

控制器

package application;

import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.ScrollPane.ScrollBarPolicy;


public class controller {

     ScrollPane scrollPane = new ScrollPane();
     Button button = new Button("My Button");


    public void initialize() {
        button.setPrefSize(400, 300);
        scrollPane.setContent(button);
        scrollPane.setVbarPolicy(ScrollBarPolicy.AS_NEEDED);
        scrollPane.setHbarPolicy(ScrollBarPolicy.AS_NEEDED);
    }
}

主要

package application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        final Parent parent = FXMLLoader.load(getClass().getResource("ui.fxml"));
        primaryStage.setTitle("ScrollPane Demo ");
        primaryStage.setScene(new Scene(parent,600, 600));
        primaryStage.show();
     }
public static void main(String[] args) {
        launch(args);}
    }

fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<VBox id="vbox" prefHeight="400" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.controller">
   <children>
      <Pane prefHeight="200.0" prefWidth="200.0" />
   </children>
</VBox>

您需要在控制器中包含您的 vbox,如下所示:

@FXML
private VBox vbox;

之后,将滚动窗格添加到 vbox 的子项中:

vbox.getChildren().add(scrollPane);

请注意,您没有将按钮添加到滚动窗格的内容中,因此您的滚动窗格当前是空的!

编辑:为什么要通过 fxml 和代码添加节点?如果确实有必要,请使用此解决方案,无论如何使用 fxml 来构建您的 UI.