sábado, 24 de enero de 2009

JavaFX: Applet con area para arrastrarlo


Esta versión posee un area delimitada que permite arrastrar el applet fuera del navegador. La versión anterior permitía arrastrar el applet desde cualquier area del applet. El inconveniente de la versión anterior, es que no permite utilizar drag and drop (arrastrar elementos) dentro del applet, porque arrastraba el applet completo fuera del navegador.




package advdragapplet;

import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.text.*;
import javafx.scene.text.TextOrigin;
import javafx.scene.shape.*;
import javafx.scene.paint.*;
import javafx.scene.input.MouseEvent;
import javafx.animation.Timeline;
import javafx.stage.AppletStageExtension;

// area para arrastrar el applet
var dragArea:Group;
dragArea = Group {

opacity: 0.5
// la barra solo aparece si es un applet y puede ser arrastrado
visible: bind AppletStageExtension.appletDragSupported
onMouseDragged:function(e:MouseEvent):Void {
stage.x += e.dragX;
stage.y += e.dragY;
}
content: [
Rectangle {
x: 0
y: 0
width: 140
height: 20
fill: Color.YELLOW
},
Text {
font: Font {
size: 12
}
x: 10,
y: 5
textOrigin:TextOrigin.TOP
content: "Arrastrame / Drag me"
}
]
};

var x:Number;
Timeline {
repeatCount: Timeline.INDEFINITE
autoReverse: true
keyFrames: [
at(0.0s) { x => 40}
at(0.5s) { x => 224}
]
}.play();

var stage=Stage {
title: "Draggable Applet"
width: 280
height: 116
scene: Scene {
fill:Color.PURPLE
content: [
Circle {
centerX: bind x,
centerY: 40
radius: 40
fill: Color.CYAN
},
dragArea,
]
}
extensions: [
AppletStageExtension {
shouldDragStart: function(e): Boolean {
e.primaryButtonDown and dragArea.hover;
}
}
]
}

No hay comentarios: