我想在每次按下按鈕時在 JTable 上顯示資料。在此之前,該按鈕將創建資料并將其存盤到串列中,并應在表上顯示資料。但是,只有創建和資料存盤在作業,資料不顯示。我該怎么做才能在表格上顯示資料。
這是我為填滿桌子而制作的抽象模型。
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[] {
"Product:", "ID:", "Variant:", "Size:","Unit Price:","Quantity:","Unit Total:"
};
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);
}
}
}
這就是 JTable 的創建方式:
CartTableModel model = new CartTableModel(productList);
JTable cartTable = new JTable(model);
此外,這是創建資料的方式:
public void actionPerformed(ActionEvent e) {
if(e.getSource() == coconutPieBtn){
cart.addProduct(new Product("Coconut Creamy Pie", 101,"Pastry","Med",79.99));
}
}
uj5u.com熱心網友回復:
fireTableCellUpdated(productList.size(), columnNames.length)
您指定的行/列值是錯誤的,原因有兩個:
- 無論您更新哪個單元格,您始終使用相同的值
- java 索引是基于 0 的,因此您指的是不存在的行/列。
只需使用:
fireTableCellUpdated(rowIndex, columnIndex)
還:
cart.addProduct(new Product("Coconut Creamy Pie", 101,"Pastry","Med",79.99));
是錯的。創建模型后,您需要將新產品添加到CartTableModel,而不是串列。
所以你需要在你的 CartTableModel 中創建一個方法來動態添加產品。
基本代碼是:
public void addProduct(Product product)
{
insertProduct(getRowCount(), product);
}
public void insertProduct(int row, Product product)
{
products.add(row, product);
fireTableRowsInserted(row, row);
}
查看Row Table Model以獲取使用動態更新模型的方法創建您自己的自定義 TableModel 的完整示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/372472.html
上一篇:Swing:不能繪制矩形
