John BOB
John BOB

Reputation: 1

JavaFX resize button in HBox FXML

So Im doing some app layout and I need to put two buttons on bottom of window. I want them also to resize whenever I change window size, is it possible to do it in SceneBuilder or modyfing fxml? I cannot find anything that would do it. I know its possible using code to bind widthProperty of parent to child but I want make it without it.

FXML code:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>


<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="200.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
   <left>
      <AnchorPane prefHeight="400.0" prefWidth="170.0" style="-fx-border-color: black; -fx-border-width: 0 2 0 0;" BorderPane.alignment="CENTER">
         <children>
            <ComboBox layoutY="2.0" prefHeight="25.0" prefWidth="170.0" />
            <RadioButton layoutY="27.0" mnemonicParsing="false" text="RadioButton" />
            <RadioButton layoutY="51.0" mnemonicParsing="false" text="RadioButton" />
            <RadioButton layoutY="74.0" mnemonicParsing="false" text="RadioButton" />
            <Label alignment="TOP_CENTER" layoutY="386.0" maxHeight="15.0" prefHeight="15.0" prefWidth="170.0" style="-fx-background-color: violet;" text="Label" AnchorPane.bottomAnchor="0.0" />
         </children>
      </AnchorPane>
   </left>
   <center>
      <AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
         <children>
            <TextField layoutY="2.0" prefHeight="165.0" prefWidth="330.0" promptText="WITAM" text="heh" AnchorPane.bottomAnchor="25.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
            <HBox layoutX="14.0" layoutY="147.0" prefHeight="25.0" prefWidth="320.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
               <children>
                  <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" prefHeight="25.0" text="Button" />
                  <Button mnemonicParsing="false" text="Button" />
               </children>
            </HBox>
         </children>
      </AnchorPane>
   </center>
</BorderPane>

Upvotes: 0

Views: 2362

Answers (1)

Edwardth
Edwardth

Reputation: 707

You have to set HBox.hgrow to ALWAYS or SOMETIMES (in the node) that the node can grow with the HBox. And you should ensure that the node can grow, for example the Button has a default maxWidth which is the computed size, so change it.

This is how it should look like:

<HBox>
    <children>
        <Button maxWidth="1.7976931348623157E308" HBox.hgrow="ALWAYS" text="Button" />
    </children>
</HBox>

Upvotes: 1

Related Questions