在 JTable 上显示输入
Displaying input on JTable
我想在每次按下按钮时在 JTable 上显示数据。在此之前,该按钮将创建数据并将其存储到列表中,并且应该在 table 上显示数据。但是,只有创建和数据存储在工作,数据不显示。我应该怎么做才能在 table.
上显示数据
这是我制作的抽象模型来填充我的table。
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));
}
}
fireTableCellUpdated(productList.size(), columnNames.length)
您指定的 row/column 值错误,原因有二:
- 无论更新哪个单元格,您始终使用相同的值
- java 索引基于 0,因此您指的是不存在的 row/column。
只需使用:
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 的完整示例。
我想在每次按下按钮时在 JTable 上显示数据。在此之前,该按钮将创建数据并将其存储到列表中,并且应该在 table 上显示数据。但是,只有创建和数据存储在工作,数据不显示。我应该怎么做才能在 table.
上显示数据这是我制作的抽象模型来填充我的table。
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));
}
}
fireTableCellUpdated(productList.size(), columnNames.length)
您指定的 row/column 值错误,原因有二:
- 无论更新哪个单元格,您始终使用相同的值
- java 索引基于 0,因此您指的是不存在的 row/column。
只需使用:
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 的完整示例。