Publicidad

Duda con java swing

Publicado por EduChild96, 26 Enero de 2022, 17:11

Tema anterior - Siguiente tema

0 Usuarios y 1 Visitante están viendo este tema.

EduChild96

Hola a todos, tengo la siguiente duda, estoy intentando hacer una GUI en java para un negocio de venta de piedra, elegi este lenguaje porque parece ser el mas simple para esta tarea (acepto recomendaciones de lenguajes de programacion), pero mi problema es el siguiente, la interfaz que quiero crear es muy similar a la de las dos imagenes que adjunte en esta publicacion, es una cotizadora de cubiertas de piedra, ahora si, la gran duda que tengo: quiero que la informacion que ingrese en la interfaz se exporte automaticamente a una base de datos en excel, ¿Es posible? ¿De serlo como se hace? Lei un poco de la herramienta hivertnate reverse engineering, pero no se si es lo que necesito (no termine de comprenderla), ayuda pls
Nota: soy nuevo en la programacion de interfaces y tambien en el foro.

Rock Lee

Bueno primero que nada bienvenido por estes lados... paso a mover el tema a la zona adecuada ;). Ahora en cuanto a tu duda depende si es algo instantaneo (cada vez cotizas) o por ejemplo cada dia para llevar un control de las cotizaciones del dia. Solo cambiaria un poco como aplicar el comando si es directo sino mediante un cron jobs tome determinados valores, en su momento hice algo parecido para un punto de venta de libreria y use Apache POI definiendo el dia, cantidad, precios y ventas con un cronjobs incluso sino me equivoco permite enviarlo por correo pero lleva mas trabajo.


Saludos Familia!

EduChild96

Gracias por la respuesta Rock Lee, me gustaria que fuera instantaneo (por ejemplo que se gatille cuando se precione el boton "cotizar precio"), luego empece ayer a hacer esto entonces voy a aprender un poco mas y avanzar para poder preguntar mas detalladamente, agradeceria cualquier material que me guie en como hacer esta exportacion instantanea.
De nuevo gracias por la disposicion de ayudar tan rapidamente Rock Lee!

Rock Lee

Bueno si es instantáneo es ir tomando los valores y al final sea impreso en un excel, aunque puede tener una sobrecarga si es para algo comercial. Ahora cambia si se vuelca a una base de datos pero el camino es similar solo en vez de imprimir el archivo lo manda a la base de datos haciendo algo mas manejable digamos... igualmente con lo que te pase debería cumplir sin problemas, pero si lo afinas mas al código podría guiarte un poco mejor sino seria disparar a boca de jarro y prestaría a mas confusión.


Saludos Familia!

EduChild96

Buenas, he aprendido mucho y tengo casi listo mi programa de ventas y cotizaciones, actualmente estoy usando este codigo para exportar a excel:

package Reportes;

import java.awt.Desktop;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import modelo.Conexion;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Picture;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
public class ExcelProductos {
    public static void reporte() {
        
        
        Workbook book = new XSSFWorkbook();
        //NOMBRE DE LA HOJA
        Sheet sheet = book.createSheet("Productos");
 
        try {
            // INSERTAMOS IMAGEN
            InputStream is = new FileInputStream("src/img/logoademaropellacani.png");
            byte[] bytes = IOUtils.toByteArray(is);
            int imgIndex = book.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
            is.close();
 
            CreationHelper help = book.getCreationHelper();
            Drawing draw = sheet.createDrawingPatriarch();
            //UBICAMOS IMAGEN (COL0, FILA1)
            ClientAnchor anchor = help.createClientAnchor();
            anchor.setCol1(5);
            anchor.setRow1(1);
            Picture pict = draw.createPicture(anchor, imgIndex);
            pict.resize(2, 3);
            //TAMAÑO DE LA IMAGEN (arriba)
            //TIPO DE FUENTE, TAMAÑO, ETC
            CellStyle tituloEstilo = book.createCellStyle();
            tituloEstilo.setAlignment(HorizontalAlignment.CENTER);
            tituloEstilo.setVerticalAlignment(VerticalAlignment.CENTER);
            Font fuenteTitulo = book.createFont();
            fuenteTitulo.setFontName("Arial");
            fuenteTitulo.setBold(true);
            fuenteTitulo.setFontHeightInPoints((short) 14);
            tituloEstilo.setFont(fuenteTitulo);
            
            //TITULO DEL REPORTE
            Row filaTitulo = sheet.createRow(1);
            Cell celdaTitulo = filaTitulo.createCell(1);
            celdaTitulo.setCellStyle(tituloEstilo);
            celdaTitulo.setCellValue("Reporte de Productos");
 
            sheet.addMergedRegion(new CellRangeAddress(1, 2, 1, 3));
            //ENCABEZADOS DEL EXCEL
            String[] cabecera = new String[]{"Id","Nombre","Proveedor", "Precio", "Stock"};
 
            CellStyle headerStyle = book.createCellStyle();
            headerStyle.setFillForegroundColor(IndexedColors.BLACK.getIndex());
            headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            headerStyle.setBorderBottom(BorderStyle.THIN);
            headerStyle.setBorderLeft(BorderStyle.THIN);
            headerStyle.setBorderRight(BorderStyle.THIN);
            headerStyle.setBorderBottom(BorderStyle.THIN);
 
            Font font = book.createFont();
            font.setFontName("Arial");
            font.setBold(true);
            font.setColor(IndexedColors.WHITE.getIndex());
            font.setFontHeightInPoints((short) 12);
            headerStyle.setFont(font);
 
            Row filaEncabezados = sheet.createRow(4);
 
            for (int i = 0; i < cabecera.length; i++) {
                Cell celdaEnzabezado = filaEncabezados.createCell(i);
                celdaEnzabezado.setCellStyle(headerStyle);
                celdaEnzabezado.setCellValue(cabecera[i]);
            }
 
            Conexion con = new Conexion();
            PreparedStatement ps;
            ResultSet rs;
            Connection conn = con.getConnection();
 
            int numFilaDatos = 5;
 
            CellStyle datosEstilo = book.createCellStyle();
            datosEstilo.setBorderBottom(BorderStyle.THIN);
            datosEstilo.setBorderLeft(BorderStyle.THIN);
            datosEstilo.setBorderRight(BorderStyle.THIN);
            datosEstilo.setBorderBottom(BorderStyle.THIN);
            //IMPORTANTE AQUI CONSULTAMOS LA BASE DE DATOS, OBTENEMOS LAS COLUMNAS QUE QUEREMOS EXPORTAR.
            ps = conn.prepareStatement("SELECT id, nombre, proveedor,precio, stock FROM productos");
            rs = ps.executeQuery();
 
            int numCol = rs.getMetaData().getColumnCount();
            //ESTE BUCLE RECORRE TODOS EL RESULT SET OBTENIDO DE LA BASE DE DATOS, LUEGO LOS AGREGA A SU CELDA CORRESPONDIENTE
            while (rs.next()) {
                Row filaDatos = sheet.createRow(numFilaDatos);
 
                for (int a = 0; a < numCol; a++) {
 
                    Cell CeldaDatos = filaDatos.createCell(a);
                    CeldaDatos.setCellStyle(datosEstilo);
                    CeldaDatos.setCellValue(rs.getString(a + 1));
                }
 
 
                numFilaDatos++;
            }
            sheet.autoSizeColumn(0);
            sheet.autoSizeColumn(1);
            sheet.autoSizeColumn(2);
            sheet.autoSizeColumn(3);
            sheet.autoSizeColumn(4);
            sheet.autoSizeColumn(5);
            
            sheet.setZoom(150);
            //NOMBRE DE EL DOCUMENTO
            String fileName = "Productos";
            //RUTA DE DESCARGA
            String home = System.getProperty("user.home");
            File file = new File(home + "/Downloads/" + fileName + ".xlsx");
            FileOutputStream fileOut = new FileOutputStream(file);
            book.write(fileOut);
            fileOut.close();
            //ABRIMOS ARCHIVO LUEGO DE DESCARGAR
            Desktop.getDesktop().open(file);
            JOptionPane.showMessageDialog(null, "Reporte Generado");
 
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ExcelProductos.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException | SQLException ex) {
            Logger.getLogger(ExcelProductos.class.getName()).log(Level.SEVERE, null, ex);
        }
 
    }
}


Funciona correctamente y puedo exportar todo lo que necesito, pero ahora tengo el siguiente problema, replico este código 5 veces para datos distintos, cada uno de ellos genera su propio documento, en este caso se llama "Productos" y se guarda en una sheet llamada de la misma forma, me gustaria juntar los 5 documentos excel que genero en uno solo con 5 hojas distintas, he buscado en internet pero no lo he logrado por mi cuenta hasta ahora, se te ocurre alguna forma de hacer esto? Si es necesario te puedo adjuntar o enviar de alguna forma el proyecto completo para que lo observes a mas detalle, gracias de ante mano por leer esto, saludos

Rock Lee

No estoy seguro pero no es mas sencillo procesar primero un producto hacer un bucle y vuelva a pasar otro valor, y poder guardarlo todo en el mismo archivo con un salto de linea. Al menos la forma lo pienso sino seria agregar procesos extras sin sentido para unir los exceles finales, que no tendria sentido... son casi la 1 puede no piense claro pero sino se deberia agregar un proceso donde lea dicho archivo y agregue dicha información (al menos en php de forma no ideal se puede, supongo en java tendra algo similar).


Saludos Familia!

EduChild96

Hola a todos, luego de dos meses vuelvo a aparecer por aquí, tengo el siguiente problema: estoy haciendo el ejecutable e instalador de la aplicación que comente al principio de este post, al momento de compilar las librerías junto al archivo jar mediante la aplicación Launch4j, obtengo el siguiente error:

Executing: C:\Users\echil\Desktop\Resultado\ejecutable.exe\case.exe
Exception in thread "main" java.lang.UnsupportedClassVersionError: vista/Login has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0

Al investigar note que es porque mi versión de jdk y jre eran diferentes, una mas antigua que la otra, por lo que actualice las versiones y volví a intentarlo obteniendo el mismo resultado, por algún motivo no esta reconociendo la nueva version de jre  que instale, alguna idea de como solicionar esto? tambien adjunto un pantallazo con mis versiones actuales de jre y jdk por cmd.



Rock Lee

#7
Hey es bueno verte de nuevo :P bueno vamos por partes que ando medio dormido ::) (puedo hablar incoherencias) sino me equivoco 52 apunta a Java 8 y 61 java 16/17 que es de 2021/2022 en si lo mas nuevo. Bueno lo primero es verificar que estes usando la ultima version, por eso te da el mismo error aunque esta no lo toma como primera opcion... Algo rapido algunas veces me sirve es usar Rapid Environment Editor si todo esta correcto fijate en las librerias (sino opciones avanzadas, no se que editor estas usando) la version de compilacion correcta. Ademas en tu proyecto tenes que refrescar para que tome la nueva version sino te va a dar error siempre, porque en general siempre ponen rutas diferentes para ciertas cosas (es un error veo en todo tipo de compilador, nunca entendi por que esta de esa forma).


Saludos Familia!

Agrego: No se si aplica pero creo puede ayudar aunque esta en ingles :P Google translate es tu amigo ;)How to Fix java.lang.UnsupportedClassVersionError

Temas Similares (5)