Java, Creando JTable con swing
Bueno aqui pondré una forma sencilla de crear nuestra primera tabla con java.
La siguiente imagen nos muestra como esta compuesta una tabla
Como muestra la imagen la tabla se compone de:
- Columas (Verticales)
- Filas (Horizontales)
A la vez, las filas se componen de Celdas dependiendo de la fila y columna.
La tabla de la imagen tiene 3 Columnas
- Columna A
- Columna B
- Columna C
1 Fila con 3 Celdas
- X
- Y
- Z
En Java existe un componente que nos permitirá dibujar éste tipo de tablas y su nombre es JTable
JTable tiene el constructor sobrecargado y uno de ellos me pide dos parametros:
JTable(Vector rowData, Vector columnNames)
Un Vector de Filas y un Vector de Columnas
Tip: Vector es una clase que implementa la interface List, ArrayList tambien implementa la interface List, por lo que la forma de uso de Vector y ArrayList es igual.
Teniendo el conocimiento de lo anterior ahora lo pasaremos a codigo.
/** * @(#)Tabla.java * * Tabla application * * @author EstebanFuentealba * @version 1.00 2009/11/11 */ /* Importo lo necesario para poder dibujar ventanas */ import java.awt.*; import javax.swing.*; /* Importo la Clase Vector que se encuentra en el package java.util */ import java.util.Vector; /* mi clase Tabla hereda de JFrame */ public class Tabla extends JFrame { public Tabla() { /* Le setearé el titulo a la ventana */ super("Mi tabla"); /* a la ventana le doy dimensiones de 300 de ancho x 200 de alto */ this.setSize(300,200); /* Creo una instancia de la clase Vector llamada 'columnas' */ Vector columnas = new Vector(); /* A ese vector le agrego datos, estos datos vendrán a ser las columnas de la tabla. */ columnas.add("Columna A"); columnas.add("Columna B"); columnas.add("Columna C"); /* Creo una instancia de la clase Vector llamada 'filas' , este vector tendrá todas las filas de la tabla. */ Vector filas = new Vector(); /* Creo otro objeto de la clase Vector llamado 'fila', esto representará a una fila en particular y cada elemento que agregue a este vector será una celda. */ Vector fila = new Vector(); fila.add("X"); fila.add("Y"); fila.add("Z"); /* Agrego la fila al vector que contiene todas las filas */ filas.add(fila); /* Creo una instancia de JTable y le paso como parametro los dos Vectores: -filas -columnas */ JTable tbl = new JTable(filas,columnas); /* Creo una instancia de JScrollPane y le paso como parametro la tabla */ JScrollPane panel =new JScrollPane(tbl); /* Por ultimo agrego ese objeto de JScrollPane al contenedor de la ventana */ this.getContentPane().add(panel); this.setVisible(true); } public static void main(String[] args) { new Tabla(); } }
Con eso ya tienen una tabla funcionando =)
Saludos!
Certamen 2 [PEF2501]
Aquí dejo el Certamen 2 de la seccion PEF2501 de Programacion Orientada A Objetos.
Enunciado:
El restaurant PINPON ha decidido ofertar almuerzos a todos los trabajadores
de la empresa que así lo soliciten, para esto ha encargado la confección de
un sistema que permita llevar esos pedidos.
DEFINICIÓN DE CLASES – 20 PUNTOS
· Clase MenuEjecutivo.java
ATRIBUTOS | TIPO |
Entrada | String |
conConsome | boolean |
platoFondo | String |
Postre | String |
Liquido | String |
conCafe | boolean |
MÉTODOS
- Constructor con parámetros (que reciba todos los atributos)
- Accesador para cada atributo
- Mutador para cada atributo
- toString
REQUERIMIENTOS DE INTERFAZ – 30 PUNTOS
Basado en el anterior modelo de clases crear una aplicación que despliegue la
siguiente ventana:
Una vez escogidas las alternativas se debe calcular el precio del menú. Para
lo anterior considere las siguientes reglas:
ENTRADA VALOR
Palta Reina 1.500
Tomate relleno 1.400
Vegetariano 800
PLATO FONFO VALOR
Arroz con pollo 2.300
Bistec a lo pobre 2.800
Tortilla española 800
POSTRE VALOR
Fruta 100
De la casa 250
Los valores de los líquidos son los que se indican a continuación:
LÍQUIDO VALOR
Bebida 300
Cerveza 420
Si escoge consomé y café se debe aplicar un recargo de 100, si escoge sólo
café o sólo consomé se debe aplicar un recargo de 80.
El precio del menú se calcula de la siguiente manera:
PRECIO_MENU = VALOR_ENTRADA + VALOR_PLATO_FONDO + VALOR_POSTRE +
VALOR_LIQUIDO + RECARGO
Se pide:
Implementar las acciones en cada botón de la ventana de acuerdo a las
siguientes consideraciones:
· Botón Ingresar debe desplegar el contenido del menú escogido junto con
el valor de este en el TextArea de la ventana, considerar instanciar un
objeto de la clase MenuEjecutivo.
· Botón Limpiar debe dejar los componentes limpios o en su estado inicial.
· Botón Salir debe terminar la ejecución de la aplicación.
(50 PUNTOS)
MenuEjecutivo.java
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class MenuEjecutivo { private String entrada; private String platoFondo; private String postre; private String liquido; private boolean conConsome; private boolean conCafe; public MenuEjecutivo() { } public MenuEjecutivo(String entrada, boolean conConsome, String platoFondo,String postre, String liquido, boolean conCafe) { this.entrada = entrada; this.conConsome = conConsome; this.platoFondo = platoFondo; this.postre = postre; this.liquido = liquido; this.conCafe = conCafe; } /* Accesador */ public String getEntrada(){ return this.entrada; } public boolean getConConsome(){ return this.conConsome; } public String getPlatoFondo(){ return this.platoFondo; } public String getPostre(){ return this.postre; } public String getLiquido(){ return this.liquido; } public boolean getConCafe(){ return this.conCafe; } /* Mutadores */ public void setEntrada(String valor){ this.entrada = valor; } public void setConConsome(boolean valor){ this.conConsome = valor; } public void setPlatoFondo(String valor){ this.platoFondo = valor; } public void setPostre(String valor){ this.postre = valor; } public void setLiquido(String valor){ this.liquido = valor; } public void setConCafe(boolean valor){ this.conCafe = valor; } public int getValorEntrada() { int valorEntrada = 0; if(this.getEntrada().equals("Palta Reina")) { valorEntrada = 1500; } else if(this.getEntrada().equals("Tomate Relleno")) { valorEntrada = 1400; } else if(this.getEntrada().equals("Vegetariano")) { valorEntrada = 800; } return valorEntrada; } public int getValorPlatoFondo() { int valorPlatoFondo = 0; if(this.getPlatoFondo().equals("Arroz con Pollo")) { valorPlatoFondo = 2300; } else if(this.getPlatoFondo().equals("Bistec a lo Pobre")) { valorPlatoFondo = 2800; } else if(this.getPlatoFondo().equals("Tortilla Española")) { valorPlatoFondo = 800; } return valorPlatoFondo; } public int getValorPostre() { int valorPostre = 0; if(this.getPostre().toLowerCase().equals("fruta")) { valorPostre = 100; } else if(this.getPostre().toLowerCase().equals("de la casa")) { valorPostre = 250; } else { valorPostre = 0; } return valorPostre; } public int getValorLiquido() { int valorLiquido = 0; if(this.getLiquido().equals("Bebida")) { valorLiquido = 300; } else if(this.getLiquido().equals("Cerveza")) { valorLiquido = 420; } return valorLiquido; } public int getValorRecargo() { int recargo = 0; if(conCafe && conConsome) { recargo = 100; } else if(conCafe || conConsome) { recargo = 80; } return recargo; } public int getValorTotal() { return this.getValorEntrada() + this.getValorPlatoFondo() + this.getValorPostre() + this.getValorLiquido() + this.getValorRecargo(); } /* Sobrescritura del toString() */ public String toString() { return "Entrada: "+this.getEntrada()+"\t$"+String.valueOf(this.getValorEntrada())+"\nPlato de Fondo: "+this.getPlatoFondo()+"\t$"+String.valueOf(this.getValorPlatoFondo())+"\nPostre: "+this.getPostre()+"\t$"+String.valueOf(this.getValorPostre())+"\nLiquido: "+this.getLiquido()+"\t$"+String.valueOf(this.getValorLiquido())+"\nCon Consome: "+((this.getConConsome()) ? "Si" : "No")+"\nCon Café: "+((this.getConCafe()) ? "Si" : "No")+"\nRecargo: $"+String.valueOf(this.getValorRecargo())+"\nTotal: "+this.getValorTotal(); } }
WCertamen2.java
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class WCertamen2 extends JFrame { private JComboBox cmbEntrada,cmbFondo; private JTextField txtPostre; private JRadioButton rbCafe,rbConsome,rbAmbos,rbBebida,rbCerveza; private JButton btnIngresar,btnLimpiar,btnCerrar; private JTextArea areaDetalle; private ButtonGroup grupoA,grupoB; private MenuEjecutivo menu; public WCertamen2() { super("Registro de Pedido"); this.cmbEntrada = new JComboBox(); this.cmbEntrada.addItem("Palta Reina"); this.cmbEntrada.addItem("Tomate Relleno"); this.cmbEntrada.addItem("Vegetariano"); this.cmbFondo = new JComboBox(); this.cmbFondo.addItem("Arroz con Pollo"); this.cmbFondo.addItem("Bistec a lo Pobre"); this.cmbFondo.addItem("Tortilla Española"); this.txtPostre = new JTextField(); this.rbCafe = new JRadioButton("Café"); this.rbConsome = new JRadioButton("Consome"); this.rbAmbos = new JRadioButton("Ambos"); this.rbBebida = new JRadioButton("Bebida"); this.rbCerveza = new JRadioButton("Cerveza"); this.btnIngresar = new JButton("Ingresar"); this.btnLimpiar = new JButton("Limpiar"); this.btnCerrar = new JButton("Cerrar"); this.areaDetalle = new JTextArea(); this.init(); } public void init() { this.setSize(300,450); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); grupoA = new ButtonGroup(); grupoA.add(rbCafe); grupoA.add(rbConsome); grupoA.add(rbAmbos); grupoB = new ButtonGroup(); grupoB.add(rbBebida); grupoB.add(rbCerveza); JPanel panelComida = new JPanel(); panelComida.setBorder(new TitledBorder(new EtchedBorder(),"Comida")); panelComida.setLayout(new GridLayout(2,2)); panelComida.add(new JLabel("Entrada")); panelComida.add(cmbEntrada); panelComida.add(new JLabel("Plato Fondo")); panelComida.add(cmbFondo); Box horizontal = Box.createHorizontalBox(); horizontal.setBorder(new TitledBorder(new EtchedBorder(),"Postre")); horizontal.add(new JLabel("Postre ")); horizontal.add(txtPostre); horizontal.add(new JLabel(" Fruta,de la casa, sin postre")); JPanel panelAbajo = new JPanel(); panelAbajo.setLayout(new GridLayout(2,2)); JPanel panelCafeConsome = new JPanel(); panelCafeConsome.setBorder(new TitledBorder(new EtchedBorder(),"Café/Consomé")); panelCafeConsome.setLayout(new GridLayout(3,1)); panelCafeConsome.add(rbCafe); panelCafeConsome.add(rbConsome); panelCafeConsome.add(rbAmbos); panelAbajo.add(panelCafeConsome); JPanel panelLiquido = new JPanel(); panelLiquido.setBorder(new TitledBorder(new EtchedBorder(),"Líquido")); panelLiquido.setLayout(new GridLayout(2,1)); panelLiquido.add(rbBebida); panelLiquido.add(rbCerveza); panelAbajo.add(panelLiquido); JPanel panelDetalle = new JPanel(); panelDetalle.setBorder(new TitledBorder(new EtchedBorder(),"Detalle Menú")); panelDetalle.setLayout(new GridLayout()); panelDetalle.add(areaDetalle); panelAbajo.add(panelDetalle); JPanel panelBotones = new JPanel(); panelBotones.setLayout(new GridBagLayout()); panelBotones.add(btnIngresar); panelBotones.add(btnLimpiar); panelBotones.add(btnCerrar); panelAbajo.add(panelBotones); this.getContentPane().add(panelComida,BorderLayout.NORTH); this.getContentPane().add(horizontal,BorderLayout.CENTER); this.getContentPane().add(panelAbajo,BorderLayout.SOUTH); this.programarEventos(); this.pack(); this.setLocationRelativeTo(null); this.setResizable(false); this.setVisible(true); } public void programarEventos() { ActionListener agregar = new ActionListener() { public void actionPerformed(ActionEvent e) { String entrada = cmbEntrada.getSelectedItem().toString(); String platoFondo = cmbFondo.getSelectedItem().toString(); String postre = txtPostre.getText(); boolean conCafe = false; boolean conConsome = false; if(rbCafe.isSelected()) { conCafe = true; } if(rbConsome.isSelected()) { conConsome = true; } if(rbAmbos.isSelected()) { conCafe = true; conConsome = true; } String liquido = ""; if(rbBebida.isSelected()) { liquido = "Bebida"; } if(rbCerveza.isSelected()) { liquido = "Cerveza"; } //MenuEjecutivo(String entrada, boolean conConsome, String platoFondo,String postre, String liquido, boolean conCafe) menu = new MenuEjecutivo(entrada,conConsome,platoFondo,postre,liquido,conCafe); areaDetalle.setText(menu.toString()); pack(); } }; this.btnIngresar.addActionListener(agregar); ActionListener limpiar = new ActionListener() { public void actionPerformed(ActionEvent e) { txtPostre.setText(""); grupoA.clearSelection(); grupoB.clearSelection(); areaDetalle.setText(""); pack(); } }; this.btnLimpiar.addActionListener(limpiar); ActionListener cerrar = new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }; this.btnCerrar.addActionListener(cerrar); } }
public class CertamenDos { public static void main(String[] args) { new WCertamen2(); } }
Descargar Codigo de Fuente:
http://estebanfuentealba.net/ayudantia/Certamen2-PEF2501.rar