es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mostrando la entrada en la tabla JTable.

Quiero mostrar los datos en JTable cada vez que se presiona el botón. Antes de eso, el botón creará y almacenará los datos en la lista y debería mostrar los datos en la tabla. Pero, solo la creación y el almacenamiento de datos funcionan y los datos no se muestran. ¿Qué debo hacer para mostrar los datos en la tabla?

Este es el modelo abstracto que hice para completar mi tabla.

import javax.swing.JList;
import javax.swing.table.AbstractTableModel;
import com.main.Products;
import java.util.List;

public class CartTableModel extends AbstractTableModel{
    List<products> productList;

private final String[] columnNames = new String[] {
        "Producto:", "ID:", "Variante:", "Tamaño:","Precio unitario:","Cantidad:","Total unitario:"
};
private Class[] columnClass = new Class[] {
    String.class, Integer.class, String.class, String.class, Double.class, Integer.class, Double.class
};

public CartTableModel(List<productinfo> productList)
{
    this.productList = productList;
}

public String getColumnName(int column)
    {
        return columnNames[column];
    }

@Override
public Class<?> getColumnClass(int columnIndex)
{
    return columnClass[columnIndex];
}

@Override
public int getColumnCount()
{
    return columnNames.length;
}

@Override
public int getRowCount()
{
    return productList.size();
}

@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
    Products row = productList.get(rowIndex);
    if(0 == columnIndex) {
        return row.getProductName();
    }
    else if(1 == columnIndex) {
        return row.getProductID();
    }
    else if(2 == columnIndex) {
        return row.getVariant();
    }
    else if(3 == columnIndex) {
        return row.getSize();
    }
    else if(4 == columnIndex){
        return row.getUnitPrice();
    }
    else if(5 == columnIndex){
        return row.getQuantity();
    }
    else if(6 == columnIndex){
        return row.getTotal();
    }
    return null;
}

 @Override
public boolean isCellEditable(int rowIndex, int columnIndex)
{
    return true;
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
    Products row = productList.get(rowIndex);
    if(0 == columnIndex) {
        row.setProductName((String) aValue);
    }
    else if(1 == columnIndex) {
        row.setProductID((int) aValue);
    }
    else if(2 == columnIndex) {
        row.setVariant((String) aValue);
    }
    else if(3 == columnIndex) {
        row.setSize((String) aValue);
    }
    else if(4 == columnIndex){
        row.setUnitPrice((double) aValue);
    }
    else if(5 == columnIndex){
        row.setQuantity((int) aValue);
    }
}

}

Asimismo, así se crea la JTable:

CartTableModel model = new CartTableModel(productList);
JTable cartTable = new JTable(model);

Además, así se crean los datos:

public void actionPerformed(ActionEvent e) {
if(e.getSource() == coconutPieBtn){
cart.addProduct(new Product("Pastel de Crema de Coco", 101,"Pastelería","Med",79.99));
}
}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar los datos en el JTable, es necesario agregar el nuevo producto en la lista productList dentro del método actionPerformed(), y luego notificar a la tabla que los datos han cambiado llamando al método fireTableDataChanged(). Así es como se puede modificar el método actionPerformed():

    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == coconutPieBtn){
            cart.addProduct(new Product("Tarta Cremosa de Coco", 101,"Pastelería","Med",79.99));
            model.productList = cart.getProducts(); // actualizar la productList
            model.fireTableDataChanged(); // notificar a la tabla que los datos han cambiado
        }
    }
    

    Aquí, cart es el objeto que almacena la lista de productos, y getProducts() es un método en Cart que devuelve la lista de productos.

    Con estos cambios, el JTable ahora debería mostrar el nuevo producto agregado al presionar el botón.

Comments are closed.