Como vimos en el ejemplo anterior, la instrucción 'bind with inverse' permite iniciar el tamaño de la ventana unas ciertas dimensiones (300x300 pixeles), pero luego, las variables 'w' y 'h' reciben las variaciones del tamaño de la ventana, a través del mismo 'bind with inverse'. Esto, sumado a la instrucción 'on replace' (al definir las variables para el tamaño de la ventana), permite gatillar la validación del tamaño de la ventana.... y forzar su tamaño dentro de límites 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 tamaño de la ventana.... y al modificar el tamaño de la ventana, se actualiza los valores de las variables, con las nuevas dimensiones.
package experimentsize;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.shape.*;
import javafx.scene.paint.*;
import 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}");
}
// tamaño 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
}
}
}
}
1 comentario:
Muy buenos los ejemplos, ¡y que musicalización!
Publicar un comentario