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

问题描述 投票:0回答:1

我想从控制器创建一个滚动窗格和按钮,并在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>

javafx fxml scrollpane
1个回答
0
投票

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

@FXML
private VBox vbox;

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

vbox.getChildren().add(scrollPane);

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

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

© www.soinside.com 2019 - 2024. All rights reserved.