blog de Jose Manuel

Iniciando con JavaFX: Jython + JavaFX

Hace unas horas me puse a picarle al Jython y pues me gusto, allí andaba y luego me dije: ¿Y que onda con Swing? Pues que le sigo scripteando(ese termino siquiera existe?) me aventé unas cuantas ventanitas todo cool hasta que me acorde de JavaFX... no me pude quitar la idea de poder ejecutar código FX en Python (Jython pues...) entonces comenzó la travesía jeje.

Preparando el terreno

Antes que nada debemos establecer una variable de entorno que es la que le dirá a Jython de donde obtener las clases de JavaFX.
Para esto hacemos el procedimiento(Windows 7): Inicio > clic derecho en Equipo > Propiedades > Configuración Avanzada del Sistema > Variables de entorno.

En la ventana de Variables de entorno en la sección Variables del sistema damos clic a Nueva y colocamos los siguientes valores:
Nombre de la variable: CLASSPATH
Valor de la variable: ruta\al\sdk\de\javafx\rt\lib\jfxrt.jar en este caso yo estoy usando la siguiente: C:\Program Files\Oracle\JavaFX 2.1 SDK\rt\lib\jfxrt.jar

Ahora si, podemos continuar.

Código

Primero usaremos un .java de guía para pasarlo a .py
 

Iniciando con JavaFX : Creación del JAR ejecutable.

Cuando tengamos lista nuestra aplicación y queramos distribuirla en la forma de archivador jar ejecutable estos son los pasos que debemos seguir:

Requisitos:

  • Tener instalado JavaFX. Así como Java usa el JDK y el JRE. JavaFX usa el JavaFX SDK y el JavaFX Runtime, la versión de JavaFX que estamos usando es la 2.0.3 y el Runtime venia incluido con el SDK. En la pagina de Oracle se puede obtener el JFXR.
  • Tener NetBeans (el que estamos usando en el curso es la versión 7.1.1 con soporte para FX).
  • Y...yap.

Ahora digamos que tenemos un proyecto ya terminado, con la clase principal establecida, guardado, todo perfecto. Ahh pues crear el ejecutable es tan difícil como ir al menú Ejecutar > Limpiar y generar Proyecto. O presionar la combinación de teclas Mayus/Shift + F11

Iniciando con JavaFX: Estructura de Nodos

En el tutorial anterior vimos como crear etiquetas y usamos algunos de los métodos mas comunes para su manejo. Ahora veremos la estructura de los tipos llamados Nodos. Necesitamos, antes de continuar con el semi curso dar un vistazo a el árbol de herencia de los componentes Nodo. Ya que estos son los que mas manejaremos durante nuestro aprendizaje.

Empecemos con una imagen:

En la imagen se puede observar cuatro tipos de Nodo; ImageView, MediaView, Parent y Shape. Dentro de estas clases están la mayoría de componentes que se utilizaran en la creación de una escena de JavaFX. Para poder seguir con las siguientes imágenes debemos explicar que es un nodo.

Iniciando con JavaFX: Manejo básico de etiquetas.

Siguiendo con los tutoriales sobre JavaFX daremos inicio a la creación de componentes o como son llamados en JavaFX: controles. En esta entrada veremos como crear Labels (etiquetas) y veremos algunas instrucciones de uso básico sobre ellas.

Si nunca han usado etiquetas que sepan que son componentes visuales, osea que son parte de la GUI (Graphical User Interface, en español Interfaz Gráfica de Usuario ). Y son usadas principalmente para mostrar datos, ya sea en texto, imagen o ambas.

Para crear un objeto de tipo Label es tan fácil como:

Label label = new Label("esta es una etiqueta");

Simple, ¿Verdad?
¿Y ahora que sigue? Pues modificar algunas de sus propiedades, veamos cuales son las que tienen relación con el tema:

setTextAlignment(TextAlingment value);
Este método recibe una constante de tipo TextAlignment donde la constante representa la alineación horizontal del texto. Las constantes son:

TextAlignment.CENTER //Texto centrado
TextAlignment.JUSTIFY //Texto justificado
TextAlignment.LEFT //Texto a la izquierda
TextAlignment.RIGTH //Texto a la derecha

JavaFX: Soporte en plataformas.

Durante mi introducción a JavaFX la plataforma que use fue un Windows 7 y no note algunas de las desventajas actuales de este framework. No hay soporte en GNU/Linux. Según he leído es por la dependencia de la aceleración por hardware. Ahora, como me suele pasar, me enfado de guindos y me cambio a mi Fedora. Y al instalar el JDK de la pagina oficial y el Netbeans y empezar un proyecto de prueba me lleve la noticia de que no existe soporte en GNU/Linux. Un total facepalm para mi.

Creo que se planea lanzar una versión pero, hasta que no aparezca no habrá mas tutoriales. Lo siento por dejar el mini-curso de esta manera. Pero no pienso desarrollar aplicaciones que solo puedan ser ejecutadas en una sola plataforma, aun soy estudiante y creo que puedo darme ese lujo, me lo pensaría si fuera en otra plataforma...

Lamento no haberme dado cuenta antes. Para que el aprendizaje en nuevas tecnologías no recaiga optare por un framework diferente. Estoy abierto a recomendaciones y sugerencias. Gracias.

JavaFX: Modo Pantalla Completa

Este ejemplo no pertenece a la serie de tutos que planeo realizar sobre JavaFX, es mas como un tip.

Código

import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

/**
 *
 * @author kalt
 */

public class PantallaCompleta extends Application implements EventHandler {
    private Button boton;
    private StackPane panelPila;
    private boolean estaFull = false;
    private Stage escenaPrincipal = null;
   
    @Override
    public void start(Stage escenaPrincipal) {
        this.escenaPrincipal = escenaPrincipal;
       
        panelPila = new StackPane();
        boton = new Button("Pantalla Completa");
        boton.setOnAction(this);
       
        panelPila.getChildren().add(boton);
        Scene escena = new Scene(panelPila, 250, 150, Color.BROWN);
        escenaPrincipal.setScene(escena);
        escenaPrincipal.setTitle("Pantalla Completa");
        escenaPrincipal.show();
    }
    @Override

Iniciando con JavaFX: Hola mundo

Continuando con el post de la instalación de herramientas se viene asomando el clásico hola mundo! Empecemos!

Una aplicacion basica en JavaFX se declara de la siguiente manera:

import javafx.application.Application;
import javafx.stage.Stage;
 
public class HolaMundoJavaFX extends Application {
     
    public static void main(String args[]) {
        Application.launch(args);
    }
    @Override
    public void start(Stage escenaPrincipal) {
        escenaPrincipal.show();
    }    
}

La clase HolaMundoJavaFX hereda de Application y contiene dos métodos. El método main y el método start. Dentro de main se llama al método launch, como buena practica se recomienda que dentro de main solo exista el método launch. El método start recibe un parámetro escenaPrincipal del tipo Stage.
Si ejecutamos la clase obtenemos el siguiente resultado:

Iniciando con JavaFX: Instalación de las herramientas.

Pues como estoy creando mi propio lector de cómics, uno de los consejos de los miembros de la comunidad fue que me adentrara a JavaFX. Y pues me anime, a pesar de que llevo en la mente un comentario de @ezamudio, en el que decía que probáramos Griffon. Aunque vi el podcast por los chavos de ViveCodigo.

Total, que me hice pato y le seguí leyendo sobre JavaFX. Y ya que estamos vamos a ver que se ocupa para iniciar en el desarrollo con JavaFX.
Requisitos:
Instalar el JDK 1.7. Ahora el JDK ya cuenta con JavaFX. Asegúrense de instalarlo también pues son dos instalaciones.
IDE NetBeans 7.1.1 que es la versión que estoy usando. Escogemos la versión que cuenta con el plugin de FX, la mas conveniente es la de 73 MB por ser mas pequeña.
Después de instalar las herramientas (si tienen dudas revisen la documentación respectiva) estamos listos para empezar a desarrollar nuestras aplicaciones.

Creando nuestro proyecto

Visor de imágenes Cómico!: Mejora.

Jajaja, pues como dice el titulo, esta es la versión "mejorada" de mi intento de visor de imágenes. u_u

El proyecto consta (por ahora), de cuatro clases.
Las clases VisorUI, FiltroExtensionArchivo, EjecutarVisor, CrearMiniaturas.

Explicación de las clases.

FiltroExtensionArchivo: Esta clase contiene los tipos de imágenes que pueden ser visualizadas en el visor (redundancia everywhere @_@). Se implementa la clase FileFilter y se sobrescribe el método accept para los tipos de extensión: JPG, PNG, GIF.

CrearMiniaturas: Esta clase implementa Runnable y se sobrescribe el método run. Recibe un JList y un ArrayList<File>, se crean instancias de tipo Image de los File y se obtienen instancias escaladas de la mismas mientras se agregan al modelo del JList.

Como hacer que tus preguntas tengan mas posibilidades de ser respondidas.

Es normal que un usuario al tener un problema con algún programa quiera obtener ayuda de la comunidad y se disponga a escribir en algunos de los foros. Pero, ¿Que pasa cuando al crear el tema este queda como si hubiera sido escrito por un niño de 5 años?

Aquí daré unos tips sobre como hacer que tu pregunta tenga mas chance de ser respondida, mas rápido y con mas ganas de ayudarte por parte de la comunidad.

El mismo propósito de este tema puede parecer innecesario y/o inservible, por varias razones. Pero hay un motivo que me impulsa a hacerlo: me he dado cuenta de que la mayoría de las personas no saben como redactar una pregunta.

Distribuir contenido