style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

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
    public void handle(Event evento) {      
        pantallaCompleta(escenaPrincipal);
    }
    public void pantallaCompleta(Stage escena) {
        if(!estaFull) {
            escena.setFullScreen(true);
        } else {
            escena.setFullScreen(false);
        }
        estaFull = !estaFull;      
    }
    public static void main(String args[]) {
        Application.launch(args);
    }
}

Explicación

La clase PantallaCompleta hereda de Application e implementa la clase EventHandler. Esto hace que se tenga que sobre escribir los métodos start y handle, respectivamente.

Se usan 4 elementos, un componente de tipo Button, un StackPane, un Stage (la ventana) y una variable de tipo boolean para el control.

El método launch llama al método start quien crea los componentes y muestra la ventana. Aqui se le agrega un EventHandler al botón. Cuando es presionado se llama al metodo handle y este a su vez llama a pantallaCompleta. Este método recibe un objeto Stage (en este caso, la ventana misma).
Lo que realiza este método es comprobar el estado de la variable estaFull. Cuando es false se pasa un true al método setFullScreen, cuando es true se pasa un false. La ultima linea del método asigna a estaFull su valor inverso.

Imágenes

Tamaño normal:

Pantalla completa:

Algo que me pareció chido fue que por defecto cuando entras al modo pantalla completa ya hay una tecla (Esc) que te regresa al modo normal.
Saludos.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

algo nuevo

Bueno pues aprender algo nuevo no tiene nada de malo, solo tengo una duda.

Cual seria un buen uso para JavaFX, me refieron en el sentido de crear aplicaciones. ??

Oh contra que otro entorno seria comparable ??

Imagen de Jose Manuel

Pues veras, esta plataforma

Pues veras, esta plataforma esta principalmente diseñada para desarrollar las RIAs (Rich Internet Application). Con la posibilidad de animaciones y efectos, es aquí donde dicen que JavaFX no tiene nada que hacer, puesto que ya existe Flash de Adobe y Siverlight de Microsoft. Y ni hablar de HTML5... En Desktop...pues la cosa no cambia mucho pero, según algunos si compite contra los anteriormente mencionados y otros mas.

Pero ahora que ya es open source algunos desarrolladores tienen la esperanza que la comunidad de desarrollo de JavaFX realice un milagro... jajaja, y como a mi me gusto, también espero que se haga un poco mas popular, que en la red casi no encuentras ejemplos de JavaFX 2.0 ni siquiera en ingles (aunque no he realizado busquedas extensas).

Si te interesa y puedes comprarlo, aquí hay un libro en amazon que puede servirte como guía de inicio: http://www.amazon.com/JavaFX-2-0-Introduction-Carl-Dea/dp/1430242574

Espero haber respondido tu pregunta. Saludos.

Que bueno que te decidiste a

Que bueno que te decidiste a probarlo, a mi tambien me gusto bastante en especial que puedes construir la interfaz en xml (FXML).
Te dejo un link que puede que te sea de utilidad: http://www.oracle.com/technetwork/java/javafx/tools/index.html

Imagen de Sr. Negativo

JavaFX - Griffon

Por lo que comentaste en tu otro post Griffon me parece buena opción, sin embargo "la moda" es realizar aplicaciones web en vez de las de escritorio.

A mi parecer Swing todavía tiene vida.

Pero si ya te decidiste los lo Web puedes echerle un vistazo a estos Frameworks:

Esta bien explicado tu post.

Imagen de Jose Manuel

@luischavez, pues ya ves, me

@luischavez, pues ya ves, me anime, luchando contra el destino, y es que ya muchos lo consideran uno menos. Gracias por el link, hacerlo con xml parece raro, no se siente como si programaras, se siente mas como si crearas una pagina web jeje, mensadas mías.

@Sr. Negativo
Bueno realmente no me he decidido por los de web, simplemente resulto que JavaFX también sirve para escritorio jaja. Aunque a mi me gusta mas el desarrollo de aplicaciones de escritorio. Ya vi el Vaadin, esta O.O chido. A la mejor y me anime ahora si con aplicaciones para web.

Gracias por comentar. Saludos.

sobre java

solo una pregunta con el metodo getChildren() para que se utiliza y con el metodo main lauch(args) no se que signifique

java fx

soy nuevo en javafx y en java pero mi proyecto lo debo desarrollar con javafx y por eso he estado viendo tus tutoriales que son muy buenos pero tengo ciertas dudas en java swing cuando queria hacer una clase que tuviera una ventanta, la heredaba de la JFrame y en el constructor de la misma especificaba sus propiedades(tamaño,titulo etc) lo que ahora no logro entender es que las clases en javafx extienden de Application y pues tiene el metodo start, donde definis su tamaño con el objeto Stage.

Imagen de Jose Manuel

@HackRock gracias por

@HackRock gracias por comentar :)

Primero tu duda sobre el método getChildren(). En esta publicación menciono la estructura sobre los Nodos, de allí podemos obtener la definición de Nodo. Entonces, un nodo puede contener a otros nodos, haciendo al primero un nodo padre y al segundo un nodo hijo.

Ahora, hay tres tipos de nodos padre: Region, Group, Control. Todos estos tipos de nodos padre heredan de la clase Parent, de ella se implementa el método getChildren() en todos los nodos padre. Si observas la imagen(la que esta adjunta) que esta en la publicación que menciono, notaras que dentro de Region están los layouts, pues bien, el layout usado aquí es un layout de tipo StackPane.

El uso de el método getChildren() regresa una lista de los nodos hijos que contiene un nodo padre.
El tipo de objeto de esta lista es: ObservableList<E> que es la clase que se usa para agregar diferentes elementos pero, como en este caso hablamos de Nodos, entonces: ObservableList<Node> este es el tipo de lista que regresa el método. De este objeto podemos obtener los métodos que implementa; add(), addAll(), remove(), removeAll() y los demás... en otras palabras:

Un nodo padre obtiene una lista de nodos hijos, y a partir de esta lista puede hacer uso de métodos que permiten modificar la lista de nodos. Ya sea agregando mas nodos hijos o eliminando los nodos hijos.

El método lauch(args) que esta dentro del método principal es un método de la clase abstracta Application. Así como debemos implementar el método start() para poder ejecutar nuestra aplicación debemos implementar a launch(). Primero expliquemos la clase Application:

El ciclo de vida de una aplicación de JavaFX es;

  • Se crea una instancia de la clase Application (aquí es donde entra nuestra clase) y también el hilo principal de la aplicación JavaFX
  • Se llama al método init() de la clase Application
  • Este lanza el hilo init y llama al método start()
  • Se finaliza el hilo init y se llama al método Plataform.exit()
  • Se llama al método stop() que finaliza el hilo principal de la aplicacion JavaFX

Entonces el objeto Application de nuestra clase llama dentro del método main a launch(args) que indica que sera una aplicación independiente (standalone). El método start() lo que hace es recibir un objeto del hilo principal de la aplicación JavaFX y lo que este contiene es una ventana prefabricada de la que a partir de allí nosotros podemos usar.

Espero haberte respondido las dudas y no haberte perdido mas :)
Saludos!

JavaFx

Jose Manuel muchas gracias por tu ayuda de verdad he comprendido lo de el metodo getChildren() y tambien lo de Stage y scene, me has ayudado más que mi profesor que la verdad no sabe explicar, tengo otra duda en la aplicacion que tengo que hacer esta relacionada con una base de datos,por lo tanto manejare roles de usuario(administrador y usuarios comunes) y entonces necesito un login que se conectara a la base de datos y verificara si es adminstrador o usuario comun y dependiendo del resultado me tendra que sacar una diferente esecenario ya que el adminstrador tendra mas privilegios, mi duda es la siguiente, primero le aparecera la ventana login se logueara verificara y le saldra la escena pero en debe desaparecer el login la ventana login no quiero que quede sino desaparezca una vez entre. Otra duda que tengo es ala ora de instanciar mi clase con javafx supongamos que tengo que instaciar a login cuando se cumpla una condicion supongamos que tengo una clase usuario y le digo que cuando if(usuario == null){ Login login = new Login()} si estuviera haciendo en una JFrame me funcionaria ya que en el contructor de la misma se encuentra la ventana con sus atributos pero en jafax no se como hacerlo ya que si instancio al metodo start espera recibir un Stage si me pudes ayudar te lo agredco de antemano!

JavaFX

Disculpa por todas las dudas que tengo pero he tratado de buscar pero la mayoria de tutoriales esta en ingles los traduzco pero se encuentran de una manera muy tecnicas que me es dificil de entender Muchas gracias por todo lo que haces por tomarte el tiempo responder!

Imagen de Jose Manuel

Ok, mira; Como ejemplo,

Ok, mira;

Como ejemplo, tendremos tres clases, La clase VentanaLogin, VentanaRoot, VentanaUsuario.
La clase VentanaLogin crea una ventana simple y fea donde si el texto en el TextField 1 es "root" nos lanza el escenario de una ventana root (la clase VentanaRoot) y si el texto es "usuario" nos lanza un escenario de usuario( la clase VentanaUsuario). De esta manera se sustituye el escenario actual por el que se escoja.

VentanaUsuario.java

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;

/**
 *
 * @author kalt
 */

public class VentanaUsuario extends Application {
    @Override
    public void start(Stage escenario)  {
        escenario.setTitle("Usuario");
        Scene escena = new Scene(new Label("VENTANA USUARIO"),400,200);
        escenario.setScene(escena);
        escenario.centerOnScreen();
        escenario.sizeToScene();  
    }    
}

VentanaRoot.java

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;

/**
 *
 * @author kalt
 */

public class VentanaRoot extends Application {

    @Override
    public void start(Stage escenario)  {
        escenario.setTitle("Administrador");
        Scene escena = new Scene(new Label("VENTANA ADMIN"), 400, 200);
        escenario.setScene(escena);
        escenario.centerOnScreen();
        escenario.sizeToScene();      
    }  
}

VentanaLogin.java

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

/**
 *
 * @author kalt
 */

public class VentanaLogin extends Application {
    private Button b1;
    private Label lb1, lb2;
    private TextField tf1, tf2;
    private BorderPane bpane;
    private HBox hB1, hB2;
    private VBox vB1;
   
    private VentanaRoot root;
    private VentanaUsuario usuario;
   
    @Override
    public void start(final Stage escenario) {
        //Creamos los controles
        b1 = new Button("Aceptar");
       
        lb1 = new Label("Usuario");
        lb2 = new Label("Contraseña");
       
        tf1 = new TextField();
        tf2 = new TextField();
       
        hB1 = new HBox(25);
        hB1.getChildren().addAll(lb1, tf1);
       
        hB2 = new HBox(7);
        hB2.getChildren().addAll(lb2, tf2);
       
        vB1 = new VBox();
        vB1.getChildren().addAll(hB1, hB2);
       
        bpane = new BorderPane();
        bpane.setCenter(vB1);
        bpane.setBottom(b1);
       
        //Creamos la escena
        Scene escena = new Scene(bpane, 220, 100, Color.DARKGRAY);
       
        //Seteamos la escena en el escenario
        escenario.setScene(escena);
        //Caracteristicas de la ventana
        escenario.setTitle("Login");
        escenario.centerOnScreen();
        escenario.sizeToScene();
        escenario.show();    
       
        //La accion para el boton...
        b1.setOnAction(new EventHandler<ActionEvent> () {
            @Override
            public void handle(ActionEvent event) {
                if(tf1.getText().equals("usuario")) {
                    usuario = new VentanaUsuario();
                    usuario.start(escenario);
                } else if(tf1.getText().equals("root")) {
                    root = new VentanaRoot();
                    root.start(escenario);
                }
            }
        });
    }
    public static void main(String args[]) {
        Application.launch(args);
    }    
}

Lo que hacemos es parecido a las instancias de Swing, en la clase VentanaLogin creamos un objeto de tipo VentanaRoot y de tipo VentanaUsuario. Cuando se escoja una opción y se realice el evento se instancian los objetos y se llama al método start(). Como este método debe recibir un Stage, le pasamos el que JavaFX crea por nosotros y entonces es cambiado por el de la clase instanciada, dando como resultado la nueva ventana.

De esa manera ya no ocupas ocultar/destruir la ventana de login, pues ahora ha cambiado por otra ;)
Espero que se entienda el ejemplo y te sirva, lo hice muy rápido jeje
Saludos!

JavaFx

Me ha ayudado mucho! gracias solo porque el metodo start tiene que recibir una propiedad tipo final ? final Stage escenario

Imagen de Jose Manuel

Ah! se me olvido esa parte.

Ah! se me olvido esa parte. El escenario es usado en el método handle dentro de una clase interna anónima. Para usarla debemos declararla como final.

Bien pudimos usar otra forma de accesar al objeto Stage. Por ejemplo;

public class VentanaLogin extends Application implements EventHandler {
    private Button b1;
    private Label lb1, lb2;
    private TextField tf1, tf2;
    private BorderPane bpane;
    private HBox hB1, hB2;
    private VBox vB1;
    private Stage escenario;
    private VentanaRoot root;
    private VentanaUsuario usuario;
   
    @Override
    public void start(Stage escenario) {
        this.escenario = escenario;
        //Creamos los controles
        b1 = new Button("Aceptar");
        b1.setOnAction(this);
       
        lb1 = new Label("Usuario");
        lb2 = new Label("Contraseña");
       
        tf1 = new TextField();
        tf2 = new TextField();
       
        hB1 = new HBox(25);
        hB1.getChildren().addAll(lb1, tf1);
       
        hB2 = new HBox(7);
        hB2.getChildren().addAll(lb2, tf2);
       
        vB1 = new VBox();
        vB1.getChildren().addAll(hB1, hB2);
       
        bpane = new BorderPane();
        bpane.setCenter(vB1);
        bpane.setBottom(b1);
       
        //Creamos la escena
        Scene escena = new Scene(bpane, 220, 100, Color.DARKGRAY);
       
        //Seteamos la escena en el escenario
        escenario.setScene(escena);
        //Caracteristicas de la ventana
        escenario.setTitle("Login");
        escenario.centerOnScreen();
        escenario.sizeToScene();
        escenario.show();    
       
        //La accion para el boton...
       
    }
    public static void main(String args[]) {
        Application.launch(args);
    }

    @Override
    public void handle(Event arg0) {
        if(tf1.getText().equals("usuario")) {
                    usuario = new VentanaUsuario();
                    usuario.start(escenario);
                } else if(tf1.getText().equals("root")) {
                    root = new VentanaRoot();
                    root.start(escenario);
                }
    }
}

Si creamos un objeto Stage y le asignamos el valor del objeto Stage creado por JavaFX ya tenemos acceso a el desde cualquier método de nuestra clase, ahora, si implementamos la clase abstracta EventHandler y sobrescribimos el método handle el atributo escenario no necesita ser final.
Espero que te sirva! Saludos!

JavaFx

Gracias, cuando tengo varios botones podria implemetar el metodo handle(Event evento)
podria ir comparando como se hacia con acctionListener que tenia el metodo performed(Event evento) esque es necesario que utilice varios botones entonces debo contralar todo los eventos. Muchas Gracias estoy por empezar con mi proyecto! simpre te estare consultando por si tengo un problema .

javaFx @Jose Manuel

@Jose Manuel Explicacionn de JavaFx
Mira solo te queria pedir favor si podes hacer un ejemplo en javafx de un formulario que pida los datos de una persona como nombre apellido, nombre de un usuario y su contraseña teniendo en cuenta que para la contraseña se utilice un tipo de PassworField y como pedir lo que ingreso con en TextField que utilizas el getText() pero en password que se utiliza? y tambien como utilizar HBox VBox! y que se le pueda colocar una imagen a el formulario o al esenario! gracias por ayudar!.

Imagen de Jose Manuel

Lo siento, pero las

Lo siento, pero las explicaciones sobre esos temas aun no están preparadas. Ademas no cuento con tiempo para explicarte con lujo de detalle.
Mientras decirte para obtener el texto del PasswordField se usa el mismo método getText().

javaFx

ok, gracias!

Imagen de Jose Manuel

Se vienen buenos temas ;)

Pero si te sirve, dentro de unos días pienso ponerme al cien para publicar cosas interesantes, a la mejor dentro de estas publicaciones encuentras algo que te sea de utilidad.
Saludos.

JavaFX

pues estare pendiente, de tus publicaciones gracias.

JavaFx

fijate que tengo una duda en mi proyecto no debe crear varias classes que hereden de Application sino de Stage pero no c como hacer esa parte no c si me puedes explicar un poco

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">