Propiedades de los componentes
Cómo controlar tamaño, crecimiento, color, posición, alineación, espaciado y tipografía de cualquier control JavaFX.
1Tamaño y prioridad de crecimiento
El tamaño físico se controla con setPrefWidth(), setPrefHeight(), setMinWidth(), setMaxWidth() y el escalado con setScaleX()/setScaleY().
Button button = new Button("Enviar");
button.setPrefSize(120, 40);
En layouts flexibles (HBox, VBox) la clase javafx.scene.layout.Priority indica cómo crece cada nodo: ALWAYS (crece siempre), SOMETIMES (crece si hay espacio) y NEVER (tamaño fijo).
HBox hbox = new HBox(10);
Button btn1 = new Button("Aceptar");
HBox.setHgrow(btn1, Priority.ALWAYS);
hbox.getChildren().addAll(btn1, btn2, btn3);
hbox.setPrefWidth(400);
2Color, estilo y posicionamiento
El color y el estilo se personalizan con setStyle() (CSS inline) o con métodos específicos como setTextFill(), setBackground(), setBorder(). También se puede aplicar una hoja CSS externa con scene.getStylesheets().add("style.css").
El posicionamiento puede ser automático (el layout decide: VBox, HBox, GridPane, FlowPane, TilePane, BorderPane, AnchorPane — ver apartado 3) o manual/absoluto, con setLayoutX(), setLayoutY(), setTranslateX(), setTranslateY(), setRotate().
// Posicionamiento manual
Label label = new Label("Hola JavaFX");
label.setLayoutX(100);
label.setLayoutY(50);
// AnchorPane (adaptable al redimensionar)
AnchorPane.setTopAnchor(label, 20.0);
AnchorPane.setLeftAnchor(label, 30.0);
3Alineación, espaciado y tipografía
Dentro de VBox/HBox: setAlignment(Pos.CENTER). En celdas de GridPane: GridPane.setHalignment(nodo, HPos.LEFT/CENTER/RIGHT) y GridPane.setValignment(nodo, VPos.TOP/CENTER/BOTTOM/BASELINE). Valores de Pos disponibles: TOP_LEFT, TOP_CENTER, TOP_RIGHT, CENTER_LEFT, CENTER, CENTER_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, BASELINE_LEFT, BASELINE_CENTER, BASELINE_RIGHT.
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setVgap(10);
grid.setHgap(10);
Label label = new Label("Usuario:");
GridPane.setHalignment(label, HPos.RIGHT);
TextField textField = new TextField();
textField.setAlignment(Pos.CENTER_LEFT);
grid.add(label, 0, 0);
grid.add(textField, 1, 0);
Espaciado, margen y padding: setSpacing() (distancia entre nodos hijos), setPadding(new Insets(top, right, bottom, left)) (espacio interno), HBox.setMargin(nodo, new Insets(5)) (espacio externo individual).
VBox vbox = new VBox(10);
vbox.setPadding(new Insets(15));
Fuente y texto: setFont(), setTextAlignment() (LEFT, CENTER, RIGHT, JUSTIFY), setWrapText().
Label label = new Label("Texto largo...");
label.setWrapText(true);
label.setFont(new Font("Verdana", 14));
SimpleInterface, sin estilos, y StyledInterface, con fuentes, colores, bordes redondeados y CSS inline) que ilustran estas propiedades combinadas. El código íntegro de ambos no se ha transcrito aquí; consúltalo en la fuente si lo necesitas.✓Ideas clave que debes dominar
- Tamaño:
setPrefSize()· Crecimiento en layouts flexibles:Priority. - Estilo:
setStyle()(CSS inline) o CSS externo congetStylesheets(). - Posición: automática (layout) vs manual (
setLayoutX/Y,AnchorPane). - Alineación:
Posen VBox/HBox,HPos/VPosen GridPane. spacing= entre hijos ·padding= interior ·margin= exterior de un nodo concreto.
Adaptado de Propiedades de los componentes.