Napster89
Napster89

Reputation: 63

How to create a scrollpane on fxml using controller

I would like to create a scrollpane and button from the controller and display it in fxml, is that possible? This my code but it doesn't work

controller

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);
    }
}

main

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>

Upvotes: 2

Views: 496

Answers (1)

Ansaldos
Ansaldos

Reputation: 308

You need to include your vbox in your controller, like this:

@FXML
private VBox vbox;

After that, add your scrollpane to your vbox's children:

vbox.getChildren().add(scrollPane);

Note that, you not added your button to your scrollpane's content, so your scrollpane is currently empty!

Edit: why you want to add nodes via fxml and from code too? Use this solution if it is really necessary, anyway use fxml to build your UI.

Upvotes: 1

Related Questions