Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I add margin to a JavaFX element using CSS?

I have the following fragment of FXML:

<VBox fx:id="paneLeft">
    <TextField promptText="Password"/>
    <Button fx:id="btnLogin" text="Login" maxWidth="10000"/>
    <Hyperlink text="Registration"/>
</VBox>

Is it possible to add a spacing of 10px between the Button and Hyperlink elements using CSS?

Thanks in advance!

like image 545
vbezhenar Avatar asked Jun 07 '13 05:06

vbezhenar


People also ask

How do you add margins in JavaFX?

You can set the margin for child nodes of a JavaFX VBox using the static setMargin() method. Here is an example of setting the margin around a JavaFX Button using the setMargin() method: Button button = new Button("Button 1"); VBox vbox = new VBox(button); VBox. setMargin(button, new Insets(10, 10, 10, 10));

Can CSS be used in JavaFX?

CSS styles are applied to nodes in the JavaFX scene graph in a way similar to the way CSS styles are applied to elements in the HTML DOM. Styles are first applied to the parent, then to its children.

What is region JavaFX?

Region is the base class for all JavaFX Node-based UI Controls, and all layout containers. It is a resizable Parent node which can be styled from CSS. It can have multiple backgrounds and borders. It is designed to support as much of the CSS3 specification for backgrounds and borders as is relevant to JavaFX.


2 Answers

Probably really late to the party, but I use another approach which might be helpful for others too.

There's no -fx-margin: 5px; CSS property for JavaFX buttons, but you can workaround the behaviour with a combination of -fx-padding, -fx-border-insets and -fx-background-insets.

For example a button with a 5px margin.

.button-with-margin {     -fx-padding: 5px;     -fx-border-insets: 5px;     -fx-background-insets: 5px; } 

Alternatively you can also define a higher padding and lower insets values in case you want a padding and a margin.

like image 82
mh-dev Avatar answered Oct 26 '22 15:10

mh-dev


It seems you cannot. JavaFX has a limited support on CSS right now.

However, the CSS padding and margins properties are supported on some JavaFX scene graph objects.

says the official CSS Reference Guide. So workaround could be to use extra other layout, another VBox for instance:

<VBox fx:id="paneLeft" spacing="10">     <VBox fx:id="innerPaneLeft">         <TextField promptText="Password"/>         <Button fx:id="btnLogin" text="Login" maxWidth="10000"/>     </VBox>     <Hyperlink text="Registration"/> </VBox> 

Update:
Found a bit more perfect way of doing it, but still not by CSS.

 <?import javafx.geometry.Insets?>   <VBox fx:id="paneLeft">         <TextField promptText="Password"/>         <Button fx:id="btnLogin" text="Login" maxWidth="10000">             <VBox.margin>                 <Insets>                     <bottom>10</bottom>                 </Insets>             </VBox.margin>         </Button>         <Hyperlink text="Registration"/>  </VBox> 

This avoids defining an unnecessary extra layout.

like image 31
Uluk Biy Avatar answered Oct 26 '22 14:10

Uluk Biy