Home > Software engineering >  JavaFX - Taking up the entire canvas
JavaFX - Taking up the entire canvas

Time:12-25

In JavaFX, is there a way to "autofit" elements on a page so they take up the entire thing?

Currently, I'm trying to make the window have two buttons that together take up the entire canvas, but am not sure how to do that, given that it is possible to stretch the window, etc. I've tried playing around with Button.setPrefSize, but the button size stays the same, it just shows you a window with two outsized buttons, the text of which is not visible.

What I currently Have

What I currently Have

enter image description here

What I want (but for any window size)

CodePudding user response:

Here's one way (code here but also possible in Scene Builder and FXML):

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;

public class TestApplication extends Application {
    
    @Override
    public void start(Stage stage) throws Exception {
        Button button1 = new Button("Button1");
        HBox.setHgrow(button1, Priority.SOMETIMES);
        button1.setMaxWidth(Double.MAX_VALUE);
        button1.setMaxHeight(Double.MAX_VALUE);

        Button button2 = new Button("Button2");
        HBox.setHgrow(button2, Priority.SOMETIMES);
        button2.setMaxWidth(Double.MAX_VALUE);
        button2.setMaxHeight(Double.MAX_VALUE);

        HBox hBox = new HBox(button1, button2);
        AnchorPane.setLeftAnchor(hBox, 0.0);
        AnchorPane.setRightAnchor(hBox, 0.0);
        AnchorPane.setTopAnchor(hBox, 0.0);
        AnchorPane.setBottomAnchor(hBox, 0.0);
        AnchorPane rootContainer = new AnchorPane(hBox);

        Scene scene = new Scene(rootContainer, 600, 600);
        stage.setScene(scene);
        stage.show();
    }
    
    public static void main(String[] args) {
        launch();
    }
}
  • Related