Materia: Programación III PROG3-V01 Sección: 01 Profesor: Ing. René Alberto Castro Velásquez Alumno: Evert Fernando Rivas Castillo Carnet: 29-5588-2015 Tarea:
Tarea Individual Evaluación No. 3.
Fecha: Martes 17 de Octubre de 2017.
Índice Introducción: ....................................................................................................................................... 4 Objetivo ............................................................................................................................................... 4 Enunciado del Problema ..................................................................................................................... 5 Código. ................................................................................................................................................ 6 Capturas .............................................................................................................................................. 9 Conclusiones. .................................................................................................................................... 10 Bibliografía ........................................................................................................................................ 10
Introducción: Por medio de los conocimientos adquiridos en clases e investigaciones en internet se ha creado un código que sea similar al publicado por el docente en clases que cree una tabla y muestre el nombre de los vendedores asi como también re alice los cálculos faltantes y mejore la presentación de la tabla ubicando los botones de forma horizontal con respec to al cuadro de interfaz grafica.
Objetivo Crear un código completo y funcional de manera eficaz que realice cálculos complejos y muestre la información de una tabla determinada con una interfaz grafica amigable para el usuario.
Enunciado del Problema Crear un código similar al publicado en el aula de clases que complete los siguientes puntos: 1. Mostrar el nombre de los vendedores en la parte izquierda de la tabla para facilitar la identificación de las ventas. 2. Incluir los cálculos faltantes. 3. Mejorar la presentación colocando los botones debajo de la tabla pero en forma horizontal.
Código. import javax.swing.table.AbstractTableModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.GridLayout; import java.awt.Dimension; import java.text.DecimalFormat; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; . public class EjemploTabla2 extends JPanel { private JTable tabla; . public EjemploTabla2() { super(); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); tabla = new JTable(new MiTablaModelo()); tabla.setPreferredScrollableViewportSize(new Dimension(500, 70)); tabla.setFillsViewportHeight(true); add(new JScrollPane(tabla)); } . static class MiTablaModelo extends AbstractTableModel { private String [] dias = {"Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"}; private String [] nombres = {"Pedro Hernández", "Juan Cardona", "Ana Magaña", "Carlos Soriano", "Roberto Durán", "María López", "Luisa Tobar", "Jorge Escalante", "Roxana Flores", "Rosa Cea"}; . Object [][] datos = { {123.65, 113.23, 143.23, 131.34, 153.32, 195.34, 125.98}, {139.56, 139.39, 131.98, 183.47, 162.27, 150.06, 191.84}, {169.61, 191.91, 119.87, 132.71, 125.21, 107.61, 119.43}, {169.16, 129.29, 151.88, 133.77, 192.27, 160.76, 181.34}, {159.66, 179.89, 131.98, 198.47, 162.74, 110.55, 153.65}, {132.89, 139.76, 183.84, 136.31, 140.46, 171.62, 118.23}, {134.46, 145.23, 175.38, 153.73, 184.28, 179.42, 153.07}, {172.32, 149.72, 157.61, 128.61, 167.72, 137.71, 174.52}, {129.34, 148.63, 193.38, 138.28, 120.52, 154.16, 162.18}, {137.84, 174.58, 173.73, 117.37, 193.25, 137.15, 127.41} }; . public int getColumnCount() { return dias.length; } . public int getRowCount() { return datos.length; } . public String getColumnName(int col) { return nombres[col]; } . public Object getValueAt(int fil, int col) { return datos[fil][col]; } } . static class Action1 implements ActionListener { public void actionPerformed(ActionEvent e) { MiTablaModelo modelo = new MiTablaModelo();
double total = 0.0, prom = 0.0; String [] dias = modelo.dias; String [] vendedores = modelo.nombres; double vMenor = (double) modelo.getValueAt(0, 0); int fila = 0, columna = 0, i, j; . for(i = 0; i < m odelo.getRowCount(); i++) { for(j = 0; j < modelo.getColumnCount(); j++) { if (vMenor > (double) modelo.getValueAt(i, j)) { vMenor = (double) modelo.getValueAt(i, j); fila = i; columna = j; } } } . for(i = 0; i < m odelo.getColumnCount(); i++) { total += (double) modelo.getValueAt(i, columna); } prom = total / dias.length; . DecimalFormat formato = new DecimalFormat("#,##0.00"); . String mensaje = "Venta menor = " + vMenor + "\nDía de la venta = " + dias[columna] + "\nVendedor = " + vendedores[fila] + "\nPromedio de ventas = " + f ormato.format(prom); . JOptionPane.showMessageDialog(null, mensaje, "Datos de la venta menor", JOptionPane.INFORMATION_MESSAGE); } } . static class Action2 implements ActionListener { public void actionPerformed(ActionEvent e) { MiTablaModelo modelo = new MiTablaModelo(); double total = 0.0, prom = 0.0; String [] dias = modelo.dias; String [] vendedores = modelo.nombres; double vMayor = (double) modelo.getValueAt(0, 0); int fila = 0, columna = 0, i, j; . for(i = 0; i < m odelo.getRowCount(); i++) { for(j = 0; j < modelo.getColumnCount(); j++) { if (vMayor < (double) modelo.getValueAt(i, j)) { vMayor = (double) modelo.getValueAt(i, j); fila = i; columna = j; } } } . for(i = 0; i < m odelo.getColumnCount(); i++) { total += (double) modelo.getValueAt(i, columna); } prom = total / dias.length; . DecimalFormat formato = new DecimalFormat("#,##0.00"); . String mensaje = "Venta mayor = " + vMayor + " 'nDía de la semana = " + dias[columna] + " 'nVendedor = " + vendedores[fila] + "\nPromedio de ventas = " + formato.format(prom); . JOptionPane.showMessageDialog(null, mensaje, "Datos de la venta mayor", JOptionPane.INFORMATION_MESSAGE); } } . static class Action3 implements ActionListener { public void actionPerformed(ActionEvent e) { MiTablaModelo modelo = new MiTablaModelo(); double total = 0.0, prom = 0.0; int i, j;
. for(i = 0; i < m odelo.getRowCount(); i++) { for(j = 0; j < modelo.getColumnCount(); j++) { total += (double) modelo.getValueAt(i, j); } } . prom = total / (modelo.getRowCount() * modelo.getColumnCount()); . DecimalFormat df = new DecimalFormat("#,##0.00"); . String mensaje = "Promedio general = " + df.format(prom); . JOptionPane.showMessageDialog(null, mensaje, "Promedio general de ventas", JOptionPane.INFORMATION_MESSAGE); } } . private static void crearYMostrarGUI() { JFrame marco = new JFrame("Tabla semanal de ventas"); marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); . EjemploTabla2 panel = new EjemploTabla2(); marco.setContentPane(panel); . JButton mostrarVMenor = new JButton("Venta menor"); marco.add(mostrarVMenor.left); mostrarVMenor.addActionListener(new Action1()); . JButton mostrarVMayor = new JButton("Venta mayor"); marco.add(mostrarVMayor.center); mostrarVMayor.addActionListener(new Action2()); . // Botón para mostrar el promedio general de ventas JButton mostrarProm = new JButton("Promedio total"); marco.add(mostrarProm.right); mostrarProm.addActionListener(new Action3()); . marco.pack(); marco.setLocationRelativeTo(null); marco.setVisible(true); } . public static void main(String [] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { crearYMostrarGUI(); } }); } }
Capturas
Conclusiones. Por medio de la siguiente asignación se ha creado un código que funciona de manera eficaz y compleja, con los conocimientos adquiridos en clases y nuestra propia investigación en internet que espero sea de acuerdo a lo solicitado en la asignación de la evaluación 3.
Bibliografía 1. http://www.forosdelweb.com/f45/alinear-botones-con-borderlayout-swing-830330/ 2. http://solocodigo.com/47311/centrar-los-componentes-de-un-jframe/