lunes, 8 de diciembre de 2008

JavaFX: Circulo arrastrable que cambia de color


Este ejemplo dibuja un circulo de radio "rad=60", que cambia de color y que puede ser arrastrado con el mouse. Además, incluye una función que se "dispara" al cambiar el color del círculo (color=0 on replace oldColor {})




package javafxclasses;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.*;
import javafx.scene.input.*;
import javafx.scene.shape.Circle;
import javafx.scene.transform.Transform;

def rad=60.0;
var x1=rad;
var y1=rad;
var dx:Number;
var dy:Number;

var colors = [Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW];

var color=0 on replace oldColor {
println("\nALERT! El color cambio!");
println("Antiguo color: {oldColor}");
println("Nuevo color: {color}");
}

Stage {
title: "Application title"
width: 400
height: 400

scene: Scene {
content: [

Circle {

centerX: bind x1;
centerY: bind y1;
radius: rad
fill: bind colors[color]

onMousePressed: function(e) {

// obtiene distancia entre el centro del círculo
// arrastrado y la posición del mouse al hacer click
dx = x1 - e.x;
dy = y1 - e.y;

if (++color==sizeof colors)
color=0;
}

onMouseDragged : function(e) {
// calcula el centro del círculo aplicando la
// diferencia respecto al centro del círculo al
// comenzar a arrastrarlo
x1 = e.x + dx;
y1 = e.y + dy;
}

}

]

}

}

No hay comentarios: