Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / JavaFX / Graficos estadisticos con javafx y swing

Graficos estadisticos con javafx y swing

Por jc mouse lunes, julio 4, 2016

En este post aprenderemos a usar los gráficos 2d que viene con JavaFX en nuestras aplicaciones java swing. Esto puede sernos de utilidad cuando necesitemos mostrar un gráfico sencillo sin tener que estar agregando otras librerías a nuestro proyecto.

Necesitamos:

  • IDE Netbeans para el desarrollo de la interfaz, pero si prefieres usar Eclipse no hay problema
  • Java 8

Nivel: Intermedio Avanzado

Paso 1: El proyecto

Creamos un nuevo proyecto Java Application que llamaremos «PieChartFX«, a continuación creamos los paquetes necesarios y agregamos un JFrame con el nombre de «PieChartJFrame»

chart fx

Paso 2: Interfaz

Ayudándonos de las herramientas de diseño de Netbeans, crearemos la siguiente interfaz:

javafx

A los spinner debes colocar un tipo de modelo numérico.

Paso 3: Código

Abre el JFrame en modo código

  • Lo primero que haremos es añadir los imports necesarios:
import java.awt.BorderLayout;
import java.util.Set;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.embed.swing.JFXPanel;
import javafx.geometry.Side;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.PieChart.Data;
import javafx.scene.control.Label;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
  • A continuación declaramos las variables que usaremos en la clase:
    /**
    * Contenedor para el grafico
    */
    private final JFXPanel jfxPanel = new JFXPanel();    
    /**
     * Para almacenar los datos del grafico
     */
    private ObservableList<Data> data2d = FXCollections.observableArrayList();
    /**
     * Grafico 2d FX
     */
    private PieChart pieChart = new PieChart();   
  • De la misma forma declaramos los métodos para integrar FX con swing y también métodos para poder interactuar entre ellos
    /**
     * Crea escena fx
     */
    private void createScene(){
        Platform.runLater(() -> {            
            pieChart.setTitle("Java vs JavaFX");//titulo del grafico
            pieChart.setLegendSide(Side.LEFT);//Posicion de leyenda            
            pieChart.setData(getChartData());            
            updateColors();            
            jfxPanel.setScene(new Scene(pieChart));
        });
    }
        
    /**
     * devuelve los valores para el grafico 2d
     */
    private ObservableList<Data> getChartData() {        
        data2d.addAll(new PieChart.Data("java", 55),
                      new PieChart.Data("JavaFx", 87));          
        return data2d;
    }
    
    /**
     * Actualiza colores de la torta y su leyenda
     */
    private void updateColors(){    
        //colores para cada seccion de la torta
        Color[] colors = { Color.web("#04B404"), Color.web("#FF8000") };
        
        int i = 0;
        //cambia colores de cada seccion de la torta
        for (PieChart.Data data : data2d) {
            String hex = String.format( "#%02X%02X%02X",
                        (int)( colors[i].getRed() * 255 ),
                        (int)( colors[i].getGreen() * 255 ),
                        (int)( colors[i].getBlue() * 255 ) );
              data.getNode().setStyle( "-fx-pie-color: "+hex+";");
              i++;
        }
        //cambia colores de la leyenda
        Set<Node> items;items = pieChart.lookupAll("Label.chart-legend-item");
        i = 0;            
        for (Node item : items) {
            Label label = (Label) item;
            final Rectangle rectangle = new Rectangle(20, 20, colors[i]);                
            label.setGraphic(rectangle);
            i++;
        }
    }

    
    /**
     * Actualiza valores del gráfico
     * @param java valores para java
     * @param javafx valores para javafx
     */
    private void setChartData(int java, int javafx){
        Platform.runLater(() -> {
            data2d.clear();
            data2d.addAll(new PieChart.Data("java", java),
                         new PieChart.Data("JavaFx", javafx));
            updateColors();
        });
        
    }
  • En el constructor de clase realizamos la siguiente modificación
    public PieChartJFrame() {
        initComponents();
        setTitle("Java Swing Graficos Estadisticos con FX");        
        setLocationRelativeTo(null);
        
        //crea la escena en javafx
        createScene();
        //añade grafico FX a Swing
        jPanel1.setLayout(new BorderLayout());
        jPanel1.add(jfxPanel,BorderLayout.CENTER);
    }
  • Finalmente declaramos la acción para cuando pulsemos el botón, se actualicen los datos del gráfico:
    private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {                                          
        setChartData( Integer.valueOf(jSpinner1.getValue().toString()),Integer.valueOf(jSpinner2.getValue().toString()));
    }     

ejecutamos el proyecto (F6)

piechart java

Link de descarga pobre <<AQUI>>

Enjoy!!!

Tags

Artículos similares

MultiHilos: Comunicación Cliente/Servidor

En anteriores post construimos aplicaciones Cliente/Servidor los cuales intercambiaban mensajes de una forma secuencial[...]

Crea patrón de desbloqueo para tus app java

El patrón de desbloqueo es una medida de seguridad que tienen algunos teléfonos inteligentes para evitar el acceso al di[...]

Crear Miniaturas Thumbnails de Videos (Código Fuente)

VLC Media Player es un reproductor multimedia de código abierto muy popular desarrollado por el proyecto VideoLAN. VLCJ [...]

SQLite INSERT, UPDATE, DELETE, QUERY

En este segundo post sobre Android y SQLite, veremos el uso de los métodos de gestión de base de datos más utilizados, e[...]

Personalizar iconos de un JTree

JTree cuenta con métodos que nos permiten cambiar los iconos de cada nodo según su estado, sin embargo a veces esto no e[...]

Mapas con HTML5 – Funciones de pintado – Parte 5

En esta penúltima parte, declaramos las funciones que nos permitirán pintar los shapes en el canvas, vamos al grano que[...]