有没有一种方法可以将ArrayList放到JTable中,其中每一行都是ArrayList的下一个索引? [英] Is there a way to put an ArrayList into a JTable where each line is the next index of the ArrayList?

查看:43
本文介绍了有没有一种方法可以将ArrayList放到JTable中,其中每一行都是ArrayList的下一个索引?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有许多不同的数组列表.我希望每个索引都是JTable中的新行,但是我不确定如何做到这一点.我做了一个for循环,但是没有用. 甚至有没有办法用数组列表而不是数组来填充JTable?

I have many different array lists. I want each index to be a new row in the JTable but I'm not sure how to do that. I made a for loop but it is not working. Is there even a way to populate a JTable with an array list and not an array?

 public TableCreator() {
    super(new GridLayout(1,0));

    String[] columnNames = {"Item Type",
      "Description",
      "Size",
      "Price"};
    // for(int i=0; i<ShoppingFunctions.cartType.size(); i++){

    for(int i=0; i<GUI.size.size(); i++){//FIX!!!!
      item = ShoppingFunctions.cartType.get(i)+"\n";
      described = GUI.describe[GUI.imageNum];
      sizes = GUI.size.get(i);
      price = ShoppingFunctions.cartPrice.get(i)+"\n";
    }//end of for


   Object[][] data = {{item, described, sizes, price}};


    final JTable table = new JTable(data, columnNames);
    table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    table.setFillsViewportHeight(true);

    if (DEBUG){
      table.addMouseListener(new MouseAdapter(){
        public void mouseClicked(MouseEvent e){
          printDebugData(table);
        }//end of method
      });//end of listener
    }//end of if

    JScrollPane scrollPane = new JScrollPane(table);
    add(scrollPane);
  }//end of method

推荐答案

简单的答案是基于AbstractTableModel

例如...

public abstract class AbstractGenericTableModel<R> extends AbstractTableModel {

    protected ArrayList<R> rows;
    protected List columnIdentifiers;

    public AbstractGenericTableModel() {
        this(0, 0);
    }

    public AbstractGenericTableModel(int rowCount, int columnCount) {
        this(new ArrayList(columnCount), rowCount);
    }

    public AbstractGenericTableModel(List columnNames, int rowCount) {
        setData(new ArrayList<>(rowCount), columnNames);
    }

    public AbstractGenericTableModel(List<R> data, List columnNames) {
        setData(data, columnNames);
    }

    public List<R> getRowData() {
        return rows;
    }

    private List nonNullVector(List v) {
        return (v != null) ? v : new ArrayList();
    }

    public void setData(List<R> data, List columnIdentifiers) {
        this.rows = new ArrayList<>(nonNullVector(data));
        this.columnIdentifiers = nonNullVector(columnIdentifiers);
        fireTableStructureChanged();
    }

    public void addRow(R rowData) {
        insertRow(getRowCount(), rowData);
    }

    public void insertRow(int row, R rowData) {
        rows.add(row, rowData);
        fireTableRowsInserted(row, row);
    }

    /**
     * Removes the row at <code>row</code> from the model. Notification of the row being removed will be sent to all the listeners.
     *
     * @param row the row index of the row to be removed
     * @exception ArrayIndexOutOfBoundsException if the row was invalid
     */
    public void removeRow(int row) {
        rows.remove(row);
        fireTableRowsDeleted(row, row);
    }

    public void setColumnIdentifiers(List columnIdentifiers) {
        setData(rows, columnIdentifiers);
    }

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

    @Override
    public int getColumnCount() {
        return columnIdentifiers.size();
    }

    @Override
    public String getColumnName(int column) {
        Object id = null;
        // This test is to cover the case when
        // getColumnCount has been subclassed by mistake ...
        if (column < columnIdentifiers.size() && (column >= 0)) {
            id = columnIdentifiers.get(column);
        }
        return (id == null) ? super.getColumnName(column)
                        : id.toString();
    }

}

public class ArrayListTableModel extends AbstractGenericTableModel<ArrayList> {

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        List<ArrayList> rows = getRowData();
        return rows.get(rowIndex).get(columnIndex);
    }

}

这将创建两个类,一个基于抽象类属"的模型,该模型允许您指定支持行的物理数据,而一个ArrayListTableModel允许您对单个数据使用ArrayList.

This creates two classes, an "abstract generics" based model, which allows you to specify the physical data which backs a row and a ArrayListTableModel which allows you to use a ArrayList for the individual data.

尽管这是假设的是,每行具有相同数量的元素,但不进行检查

What this assumes though, is each row has the same number of elements, but it makes no checks

我建议您仔细阅读如何使用表格了解更多详情

I suggest you have a closer look at How to Use Tables for more details

这篇关于有没有一种方法可以将ArrayList放到JTable中,其中每一行都是ArrayList的下一个索引?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆