Actualizando este post… era del 2008 y JavaFX cambio bastante…
Java Fx fue un lenguaje de Sun (ahora Oracle) para competir con Adobe y su tan popular Flash, ahora se convirtio en un API para Java, quieren mas detalles, haganle una visita a google, ahora tutoriales no es lo que falta, esto solo es uno mas, bueno manos a la obra.
pd-> El release actual es el javaFX 2.0.3
JavaFX es la competencia de Silverlight, Adobe Flash y HTML5, he aquí un poco de código para comenzar:
JFrame f = new JFrame(); if(com.awt.sun.util.AWTUtilities.isTranslucentySupported()) { com.awt.sun.util.AWTUtilities.setTranslucency(true); } frame.setUndecorated(true); JPanel panel = new JPanel() { protected void paintComponent(Graphics g) { Graphics2D gfx = (Graphics2D)g.create(); gfx.setRenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIASING_ON): gfx.setColor(Color.RED); gfx.drawOval(0,0,100,100); gfx.dispose(); } } frame.getRootPane().setcontent(panel); frame.setVisible(true);
Ustedes se preguntaran ¿y donde esta lo fácil y simple acá? bueno la verdad es que no hay nada de eso acá, esto es para gurus, en realidad es mucho mas fácil (solo que me gusta asustar a la gente XD) la programación para los desarrolladores en general (yo incluido).
Primero se lo bajan de aqui y también el ultimo netbeans , lo instalan ahora los siguientes pasos:
En Netbeans:
- Sobre el menú File, escogen New Project.
- En la categoría JavaFX application, escogen JavaFX Application. Click Next.
- Le ponen de nombre Circulito y click Finish.
En el archivo que se creo, borran los imports le ponen estos:
import javafx.animation.KeyFrame; import javafx.animation.KeyValue; import javafx.animation.Timeline; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.effect.BlendMode; import javafx.scene.effect.BoxBlur; import javafx.scene.paint.Color; import javafx.scene.paint.CycleMethod; import javafx.scene.paint.LinearGradient; import javafx.scene.paint.Stop; import javafx.scene.shape.Circle; import javafx.scene.shape.Rectangle; import javafx.scene.shape.StrokeType; import javafx.stage.Stage; import javafx.util.Duration; import static java.lang.Math.random;
Para entender lo que voy a explicar a continuacion les recomiendo saber lo basico de java, aunque voy a tratar de hacerlo tan entendible como pueda
Ahora borramos el código autogenerado por netbeans, menos los imports, y ponemos este código:
/** * @author Julio Cesar Cachay Perez */ public class ColorfulCircles extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.show(); } }
Como vemos el método Main() tiene al método Launch() que es el disparador.
Ahora sobrescribiremos la clase abstracta Start():
Es hora de conocer mas a fondo las funciones en java
/** * @author Julio Cesar Cachay Perez */ @Override public void start(Stage primarystage) { Group root = new Group(); Scene scene = new Scene(root, 800, 600, Color.BLACK); primaryStage.setScene(scene); primaryStage.show()
Agregamos unos 30 circulos:
/** * @author Julio Cesar Cachay Perez */ Group circles = new Group(); for (int i = 0; i < 30; i++) { Circle circle = new Circle(150, Color.web("white", 0.05)); circle.setStrokeType(StrokeType.OUTSIDE); circle.setStroke(Color.web("white", 0.16)); circle.setStrokeWidth(4); circles.getChildren().add(circle); } root.getChildren().add(circles);
Obtenemos esto:
Agregamos unos efectos visuales para que se vea interesante:
/** * @author Julio Cesar Cachay Perez */ circles.setEffect(new BoxBlur(10, 10, 3));
Bueno es hora de agregar un fondo colorido:
/** * @author Julio Cesar Cachay Perez */ Rectangle colors = new Rectangle(scene.getWidth(), scene.getHeight(), new LinearGradient(0f, 1f, 1f, 0f, true, CycleMethod.NO_CYCLE, new Stop[]{ new Stop(0, Color.web("#f8bd55")), new Stop(0.14, Color.web("#c0fe56")), new Stop(0.28, Color.web("#5dfbc1")), new Stop(0.43, Color.web("#64c2f8")), new Stop(0.57, Color.web("#be4af7")), new Stop(0.71, Color.web("#ed5fc2")), new Stop(0.85, Color.web("#ef504c")), new Stop(1, Color.web("#f2660f")),})); root.getChildren().add(colors);
Aplicamos un poco de Blend, borrando estas 2 lineas de código:
/** * @author Julio Cesar cachay Perez */ root.getChildren().add(colors); root.getChildren().add(circles);
Y agregamos este de acá donde estuvieron esas lineas:
/** * @author Julio Cesar cachay Perez */ Group blendModeGroup = new Group(new Group(new Rectangle(scene.getWidth(), scene.getHeight(), Color.BLACK), circles), colors); colors.setBlendMode(BlendMode.OVERLAY); root.getChildren().add(blendModeGroup);
Por ultimo animamos:
Primero importamos import static java.lang.Math.random
Ahora agregamos este código antes de la linea primaryStage.show():
/** * @author Julio Cesar cachay Perez */ Timeline timeline = new Timeline(); for (Node circle: circles.getChildren()) { timeline.getKeyFrames().addAll( new KeyFrame(Duration.ZERO, // la posicion inicial sera 0 new KeyValue(circle.translateXProperty(), random() * 800), new KeyValue(circle.translateYProperty(), random() * 600) ), new KeyFrame(new Duration(40000), // la posicion final sera 40s new KeyValue(circle.translateXProperty(), random() * 800), new KeyValue(circle.translateYProperty(), random() * 600) ) ); } // 40 segundos de animacion timeline.play();
Y el resultado sera una animación como esta:
Y si quieren correrlo solo van al directorio raíz del proyecto y buscan el archivo jar (aplicación de escritorio), jnlp (La aplicación funcionara en modo Web Start) o el html para web
Suerte!