Uso básico de elementos Swing con NetBeans – 23 – Uso de JPopupMenu, menú emergente.

En este ejemplo veremos cómo podemos utilizar el JPopupMenu dentro de una tabla, a la vez veremos el uso básico que se le puede dar a esta tabla, pudiendo manejarla utilizando DefaultTableModel, se personalizan las columnas del “JTable” haciendo clic derecho sobre la misma, si el menú es en español dirá “Contenido de tabla”, luego seleccionamos pestaña “columnas” y hacemos las modificaciones, en la imagen del diseño se especifican los detalles. Los campos de texto servirán para obtener datos del usuario y el botón “Agregar” para obtener esos datos y pasarla a la tabla. El JPopupMenu se agrega al formulario tomándola desde la paleta, pero esta se ubica en el área que dice “Otros componentes” como vemos en el diseño más abajo, seguido le podremos añadir los “JMenuItem” que necesitemos; para este ejemplo utilizamos dos que serán “Eliminar” y “Sumar”. Para el diseño del formulario utilizamos JFrame, el nombre del mismo es a criterio de cada uno en esta ocasión. Tomar en cuenta los nombres de variable de cada objeto, en el diseño se especifican; es muy importante ya que desde los métodos se utilizan estos nombres para referencia a cada objeto. Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho sobre la misma y clic en “Cambiar nombre de variable…”. (clic sobre la imagen para ampliar)

Lista de las importaciones que debemos de tener para utilizar ciertos elementos en nuestro formulario. Agregamos algunas líneas de código en el constructo del JFrame que se explican con comentarios.

Código Java
package com.swing.basic;//Paquete de fuentes

import java.awt.event.MouseEvent;
import javax.swing.JOptionPane;//Importaciones
import javax.swing.table.DefaultTableModel;

/**
*
* @author ECS
*/

public class UsoMenu extends javax.swing.JFrame {

/**
* Creates new form UsoMenu
*/

public UsoMenu() {
initComponents();
setLocationRelativeTo(null);//Centrar formulario
tableModel();//Método de inicio
}
private DefaultTableModel model;//Variable de clase

Creamos los métodos siguiente en modo fuente, los métodos creados por nosotros las ubicamos al final de la declaración de variables, justo antes de la llave de cierre general. Se agregan comentario para aclarar la función de cada línea de código.

Código Java
    private void tableModel(){
//DefaultTableModel para trabajar con tablas
table.getColumnModel().getColumn(0).setPreferredWidth(10);
table.getColumnModel().getColumn(1).setPreferredWidth(150);
table.getColumnModel().getColumn(2).setPreferredWidth(150);
table.getColumnModel().getColumn(3).setPreferredWidth(20);
model = (DefaultTableModel)table.getModel();
model.setRowCount(0);
}
private void agregar(){
//El id agregamos desde código
int id = table.getRowCount() + 1;
//Comprobamos que los campos no esten vacios
if(!nombres.getText().isEmpty() && !apellidos.getText().isEmpty() && !edad.getText().isEmpty()){
int ed = 0;
//Si el datos de edad no es númerico se utiliza 0-cero
try {
ed = Integer.parseInt(edad.getText());
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Se requiere dato numérico para edad..." + e);
}
//Se agregan datos a la tabla utilizando addRow
model.addRow(new Object[]{
id, nombres.getText(), apellidos.getText(),ed
});
//Se limpian los campos al agregar datos
limpiar();
}
else{
JOptionPane.showMessageDialog(null, "Faltan datos...");
}
}
//Método para limpiar campos
private void limpiar(){
edad.setText(null);
nombres.setText(null);
apellidos.setText(null);
}
//Método para sumar el número de elementos y suma total de edades
//Se llama desde JPopupMenu Sumar
private void sumar(){
//Solo se ejecuta si hay almenos una fila
if(table.getRowCount() > 0){
int count = 0;
int sum = 0;
//Se suman los datos...
for (int i = 0; i < table.getRowCount(); i++) {
count++;
sum += Integer.parseInt(model.getValueAt(i, 3).toString());
}
//Se agrega una fila con los datos...
model.addRow(new Object[]{
count,"","",sum
});
}
}
//Método para eliminar filas de la tabla...
//Se llama desde JPopupMenu Eliminar
private void eliminar(){
try {
model.removeRow(table.getSelectedRow());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "No hay fila seleccionada...");
}
}

Para el botón “Agregar” utilizamos el evento “ActionPerformed” al igual que para los “JMenuItem”. A diferencia para nuestra “Tabla” utilizamos el evento “MousePressed”, que llamará a nuestro “menú” desplegable emergente haciendo clic derecho. Si hay dudas sobre como agregar “Eventos” a objetos, en las primeras guías de la serie vimos con detalle ese punto.

Código Java
    private void agregarActionPerformed(java.awt.event.ActionEvent evt) {                                        
agregar();
}

private void tableMousePressed(java.awt.event.MouseEvent evt) {
if(evt.getButton()== MouseEvent.BUTTON3){
//Forma de localizar el punto en que se hace clic
//Parámetro x e y
//BUTTON3, clic derecho
popup.show(evt.getComponent(), evt.getX(), evt.getY());
popup.setVisible(true);
}
}

private void SumarActionPerformed(java.awt.event.ActionEvent evt) {
sumar();
}

private void EliminarActionPerformed(java.awt.event.ActionEvent evt) {
eliminar();
}

En este punto ya podremos ejecutar nuestro formulario y comprobar su funcionalidad. (Por si hay alguna duda en el proceso, debemos hacer clic derecho sobre nuestro archivo fuente y presionar “ejecutar archivo” ya que nuestro proyecto no tiene una clase principal definida)

No hay comentarios :

Publicar un comentario