Anda di halaman 1dari 2

JavaFX: Limita el tamao de la ventana (mnimo y mximo) - Bind with inverse

Esta es una variacin del ejemplo anterior, que detectaba el tamao de la ventana para ajustar el contenido (cmo descubrir el tamao de la ventana). En este caso, fuerza dimensiones mnimas y mximas para la ventana.

Como vimos en el ejemplo anterior, la instruccin 'bind with inverse' permite iniciar el tamao de la ventana unas ciertas dimensiones (300x300 pixeles), pero luego, las variables 'w' y 'h' reciben las variaciones del tamao de la ventana, a travs del mismo 'bind with inverse'. Esto, sumado a la instruccin 'on replace' (al definir las variables para el tamao de la ventana), permite gatillar la validacin del tamao de la ventana.... y forzar su tamao dentro de lmites al asignar nuevos valores para las variables 'w' y 'h'. En otras palabras, las variables 'w' y 'h' se hacen BIDIRECCIONALES... pues al modificar su valor, se afecta el tamao de la ventana.... y al modificar el tamao de la ventana, se actualiza los valores de las variables, con las nuevas dimensiones.
package experimentsize; import import import import import javafx.stage.Stage; javafx.scene.Scene; javafx.scene.shape.*; javafx.scene.paint.*; javafx.geometry.Rectangle2D;

// borde horizontal de la ventana var bh=16.0; // borde vertical de la ventana (incluye titulo) var bv=36.0; // dimension minima de la ventana var minSize=Rectangle2D{width:200 height:200}; // dimension maxima de la ventana var maxSize=Rectangle2D{width:500 height:500}; // valida dimensiones de la ventana function validateSize():Void { if (w<minSize.width) then w=minSize.width; if (h<minSize.height) then h=minSize.height; if (w>maxSize.width) then w=maxSize.width; if (h>maxSize.height) then h=maxSize.height; println("ajusto ventana a {w} x {h}"); } // tamao inicial de la ventana var w=300.0 on replace {validateSize()}; var h=300.0 on replace {validateSize()};

Stage { title: "Ajusta a dimension de ventana" width: bind w with inverse height: bind h with inverse scene: Scene { content: { Circle { translateX: bind (w-bh)/2 translateY: bind (h-bv)/2 radius:bind if (w<h) then (w-50)/2 else (h-80)/2 fill:Color.RED } } } }

Anda mungkin juga menyukai