【问题标题】:Implement jTable from Arraylist从 Arraylist 实现 jTable
【发布时间】:2025-11-25 13:15:01
【问题描述】:

我有一个包含 100 个值的 ArrayList。

al = "AA","BB","CC","DD","EE","FF"... upto 100 values

我需要将这些值插入到具有 2 列和 50 行的 jTable 中,即

col1   col2  
AA     BB   
CC     DD  
EE     FF  
...    ...   

最多 50 行

我如何得到它(最好使用循环)?需要一个通用的解决方案,因为元素或行的数量可能会有所不同。

【问题讨论】:

标签: java swing loops arraylist jtable


【解决方案1】:

这就是您需要的。我知道这可能不是优化的方式,还是试试这个:

package App;

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class JtableModel extends AbstractTableModel {

List list, oddList, evenList;
String col_names[] = {"First", "Second"};

public JtableModel(List list) {
    this.list = list;

}

public void myFormatting(){

    this.oddList = new ArrayList();
    this.evenList = new ArrayList();
    for (int i = 0; i < list.size(); i++) {
        if (i % 2 == 0) {
            this.evenList.add(list.get(i));
        } else {
            this.oddList.add(list.get(i));
        }
    }
}



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

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

@Override
public Object getValueAt(int rowIndex, int columnIndex) {

    switch (columnIndex) {
        case 0:
            try {
                return evenList.get(rowIndex);
            } catch (Exception e) {

            }
        case 1:
            try {
                return oddList.get(rowIndex);
            } catch (Exception  e) {
               //find out how you can validate this 

            }
    }

    return new String();
}
}

以及使用 NetBeans 生成的 java 文件片段:

 public class JtableDemo extends javax.swing.JFrame {

/**
 * Creates new form JtableDemo
 */
public JtableDemo() {
    initComponents();
    fillTbl();
}

public void fillTbl(){
    ArrayList arr = new ArrayList();
    arr.add("AA");
    arr.add("BB");
    arr.add("CC");
    arr.add("DD");
    arr.add("EE");

    JtableModel tableModel = new JtableModel(arr);
    tableModel.myFormatting();
    jTable1.setModel(tableModel);

}

【讨论】:

  • 把原来的arr分成两个子列表是完全没有必要的,浪费内存和时间。
【解决方案2】:

我只是将数组列表转换为二维数组...

类似的东西

public void convertToArray(){
    int count = 0;
    for (int j = 0; j < entrys.length; j++) {
        for (int i = 0; i < 2; i++) {
            entrys[j][i] = list.get(count++);
        }
    }
}

然后创建表

    String[] header = {"col1", "col2"};
    table = new JTable(entrys, header);

并添加到框架等

【讨论】:

    【解决方案3】:

    或多或少:

    import java.util.ArrayList;
     import javax.swing.*;
     import javax.swing.table.DefaultTableModel;
    
    
     public class NewClass extends JFrame {
    
    private JTable table;
    private DefaultTableModel model;
    private JScrollPane scroll;
    private String headers[] = {"col1","col2"};
    String[] data = {"AA", "BB", "CC", "DD", "EE", "FF","GG","HH","II","JJ","KK","LL","MM","NN","OO","PP","QQ","RR"};
    
    public NewClass() {
    
        model = new DefaultTableModel();
        model.setColumnIdentifiers(headers);
    
        table = new JTable();
        table.setModel(model);
    
        scroll = new JScrollPane(table);
    
        insert();
    
        add(scroll, java.awt.BorderLayout.CENTER);
        setSize(300, 300);
        setVisible(true);
    }
    
    public void insert(){  
     ArrayList<String> ar = new ArrayList<String>();
        for (int i = 0; i < data.length; i++) {
            ar.add(data[i]);
        }
    
       for (int i=0;i<(ar.size()/2);i++) {                 
        model.addRow(new Object[] { String.valueOf(ar.get(2*i)) ,  String.valueOf(  ar.get((2*i)+1))                                });
    
      }
        }
    
    public static void main(String[] args) {
    new NewClass();
        }
       }
    

    【讨论】: