首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可重用的AbstractTableModel

可重用的AbstractTableModel
EN

Stack Overflow用户
提问于 2015-06-17 11:16:47
回答 1查看 118关注 0票数 0

我正在尝试创建一个AbstractTableModel,而不是三个。应用程序使用MVC架构,因此控制器将更新模型。我对如何做列名、创建一个空列表和setValueAt方法有点困惑。列名和数据应该是静态ArrayList吗?setValueAt方法目前是使用Switch语句来完成的,但是使用数组的ArrayList可以更容易地完成吗?控制器可以从tableModel调用一个方法来清空列表,然后该方法将执行fireTableDataChanged()。目标是可重用性,并在学习时遵循良好的编码实践。

EN

回答 1

Stack Overflow用户

发布于 2015-06-26 09:45:50

我决定做两张表,并且我能够组合两张表。

代码语言:javascript
复制
package model;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumnModel;

import model.common.Order;
import model.common.Product;

public class OrderTableModel extends AbstractTableModel {

private List<Order> orderList;

private String[] columnNames = { "Product ID", "Description",
        "Supplier ID", "Order Quantity", "Unit of Measure", "Total Cost",
        "Order Date" };

  public OrderTableModel(ArrayList<Order> orderList) {
    this.orderList = orderList;
  }

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

  @Override
  public String getColumnName(int column) {
    switch (column) {
    case 0:
        return "<html>Product ID</html>";
    case 1:
        return "<html>Description</html>";
    case 2:
        return "<html>Supplier ID</html>";
    case 3:
        return "<html>Order<br></br>Quantity</html>";
    case 4:
        return "<html>Unit of<br></br>Measure</html>";
    case 5:
        return "<html>Total<br></br>Cost</html>";
    case 6:
        return "<html>Order<br></br>Date</html>";
    default:
        return null;
    }
  }

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

  @Override
  public boolean isCellEditable(int row, int column) {
    return false;
  }

  @Override
  public Object getValueAt(int row, int column) {
    Order order = (Order) orderList.get(row);

    switch (column) {
    case 0:
        return order.getProduct().getId();
    case 1:
        return order.getProduct().getProductDescription();
    case 2:
        return order.getSupplier().getId();
    case 3:
        return order.getProduct().getOrderQty();
    case 4:
        return order.getProduct().getUOM();
    case 5:
        return order.getTotalCost();
    case 6:
        return order.getDate();
    }
  }
}

另一个表格模型。

代码语言:javascript
复制
package model;

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import model.common.Product;

public class ProductTableModel extends AbstractTableModel {

  private List<Product> productList;

  private String[] columnNames = { "ID", "Description", "Inventory",
        "Minimum Quantity", "Cost", "Order Quantity" };

  public ProductTableModel() {
    productList = new ArrayList<Product>();
  }

  public ProductTableModel(ArrayList<Product> productList) {
    this.productList = productList;
  }

  public void resetTable() {
    productList.clear();
    fireTableDataChanged();
  }

  public void createEmptyTable() {
    while (productList.size() <= 12) {
        productList.add(new Product("", "", 0, 0, 0, 0));

    }
  }

  public void addRow(Product product) {
    productList.add(product);
    fireTableRowsInserted(productList.size() - 1, productList.size() - 1);
  }

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

  @Override
  public String getColumnName(int column) {
    switch (column) {
    case 0:
        return "<html>ID<br></html>";
    case 1:
        return "<html>Description<br></html>";
    case 2:
        return "<html>Inventory<br></html>";
    case 3:
        return "<html>Minimum<br>Quantity</html>";
    case 4:
        return "<html>Cost<br></html>";
    case 5:
        return "<html>Order<br>Quantity</html>";
    default:
        return null;
    }
  }

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

  @Override
  public boolean isCellEditable(int row, int column) {
    return true;
  }

  @Override
  public Object getValueAt(int row, int column) {

    Product product = productList.get(row);

    switch (column) {
    case 0:
        return product.getId();
    case 1:
        return product.getProductDescription();
    case 2:
        return product.getQtyOnHand();
    case 3:
        return product.getMinQty();
    case 4:
        return product.getCost();
    case 5:
        return product.getOrderQty();
    default:
        throw new IndexOutOfBoundsException();
    }
  }

  @Override
  public void setValueAt(Object value, int row, int column) {

    Product product = productList.get(row);

    switch (column) {
    case 0:
        product.setId((String) value);
        break;
    case 1:
        product.setProductDescription((String) value);
        break;
    case 2:
        product.setQtyOnHand((int) value);
        break;
    case 3:
        product.setMinQty((int) value);
        break;
    case 4:
        product.setCost((double) value);
        break;
    case 5:
        product.setOrderQty((int) value);
        break;
    default:
        throw new IndexOutOfBoundsException();
    }

    fireTableCellUpdated(row, column);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30881738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档