Mostrando entradas con la etiqueta desktop. Mostrar todas las entradas
Mostrando entradas con la etiqueta desktop. Mostrar todas las entradas

viernes, 5 de junio de 2009

Aquí hay algunos demos con JavaFX


A partir del minuto 20 de este video hay unas demos con JavaFX, incluyendo (minuto 30) la herramienta para generar JavaFX (como la utilizada hoy para generar Flash). Se ve bastante interesante, especialmente la capacidad de generar versiones para distintos dispositivos, en el mismo proyecto. Esto quiere decir que, mientras desarrollas una aplicación JavaFX para el escritorio, puedes ir creando una versión para un aparato móvil, un netbook o un TV con JavaFX (con distintos elementos o distribución de esos elementos en la pantalla de cada dispositivo).

Video: El show de los "Juguetes" Java

martes, 24 de febrero de 2009

Una aplicación Desktop / Móvil que se adapta a la pantalla


Este ejemplo hace algo bastante simple, pero útil:

- Detecta el profile en que se está ejecutando (si es una aplicación móvil o de escritorio)
- Dependiendo de eso, obtiene las dimensiones de la pantalla (en caso de ser móvil) o define un tamaño inicial para la aplicación de escritorio.
- En caso de tratarse de una aplicación de escritorio, resta al tamaño de la ventana el borde de la misma, de manera de conocer el area útil (en la que puede desplegar información o gráficos).
- En el caso de una aplicación de escritorio, ajusta lo desplegado al tamaño de la ventana, en caso que se cambie el tamaño a la ventana.



Aquí está el código:

package mobilescreen;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.*;
import javafx.animation.*;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;

var dx: Number=2;
var dy: Number=3;
var x: Number;
var y: Number;
var realW:Number;
var realH:Number;

var profile = FX.getProperty("javafx.me.profiles");
var isMobile = profile != null and
profile.indexOf("MIDP") >= 0;

var w: Number on replace {
if (w == 0) then w = 300;
realW = w - (if (isMobile) 0 else 16);
x = realW / 2 ;
};

var h: Number on replace {
if (h == 0) then h = 400;
realH = h - (if (isMobile) 0 else 36);
y = realH / 2 ;
};

Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames: [
KeyFrame {
time: 0.02s
action: function () {
x += dx;
y += dy;
if (x < 0 or x > realW )
dx = -dx;
if (y < 0 or y > realH)
dy = -dy;
}
}
]
}.play();

Stage {
width: bind w with inverse
height: bind h with inverse
scene: Scene {
content: [
Text {
font: Font { size: 16 }
x: 10, y: 30
content: bind
"width: {w}\nheight:{h}\nis mobile: {isMobile}"
},
Rectangle {
x: 10, y: 10
width: bind realW - 20
height: bind realH - 20
fill: Color.BLUE
opacity: 0.5
},
Circle {
centerX: bind x,
centerY: bind y
fill: Color.RED,
opacity: 0.5
radius: 40
}
]
}
};

sábado, 14 de febrero de 2009

JavaFX 1.1 liberado (incl. JavaFX Mobile)


Fue liberada la versión 1.1 de JavaFX, que incluye el primer release de JavaFX Mobile.

Ahora los programas desarrollados con JavaFX de escritorio corren sin modificación en JavaFX Mobile, a diferencia -por ejemplo- de Flex, que tiene su propia versión para móviles, FlexLite.

http://www.javafx.com/launch/


El SDK 1.1 incluye un emulador que permite probar que tal funciona la portabilidad escritorio -> móvil

También, a primera vista, se ven algunos detalles de mejor integracion con Netbeans 6.5, como algunos elementos en la paleta de componentes.

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;
}
}
]
}

JavaFX: Applet Arrastrable


Una de las nuevas funcionalidades de Java 6 update 10 es la posibilidad de crear applets "arrastrables" (que el usuario puede "arrastrar" fuera de la página de su navegador, y convertir en una aplicación de escritorio). Esta funcionalidad también está disponible -con un mínimo de trabajo- para los applets JavaFX.



Lo único que tienes que tienes que agregar a tu código es:

import javafx.stage.AppletStageExtension;

Y posteriormente, incluir este trozo como atributo del Stage:

extensions: AppletStageExtension {
shouldDragStart: function(e: MouseEvent): Boolean {
e.primaryButtonDown;
}
}

Listo, los usuarios de tu applet ya pueden arrastrarlo al escritorio y crear un short-cut (automáticamente) para re-lanzar el applet, sin siquiera tener que abrir su navegador.

Nota: Para desinstalar desde Windows un applet convertido en aplicación de escritorio, tienes que ir al Panel de Control y desinstalarlo como cualquier otro programa.

Aquí está el código del ejemplo en video:


package draggableapplet;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.*;
import javafx.scene.text.Font;
import javafx.scene.input.MouseEvent;
import javafx.animation.Timeline;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import javafx.stage.AppletStageExtension;

var x:Number;

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

Stage {

title: "Application title"
width: 270
height: 116

extensions: AppletStageExtension {
shouldDragStart: function(e: MouseEvent): Boolean {
e.primaryButtonDown;
}
}

scene: Scene {
fill:Color.YELLOW
content: [
Circle {
centerX: bind x,
centerY: 40
radius: 40
fill: Color.RED
},
Text {
font: Font {
size: 24
}
x: 10,
y: 28
textOrigin:TextOrigin.TOP
content: "Arrastrame / Drag me"
}
]
}

}