1

我想制作一个通过列表存储实体的表模型。像这样;

List list = new ArrayList<Entity>();
list.add(entity);
tableModel.setEntityVector(list);

在扩展 AbstractTableModel 的实体表模型中,方法 getValueAt(int row, int column) 应该根据行和列值返回实体字段的值。行表示列表中的实体编号,列表示实体对象中的字段编号。但问题是当我使用以下代码时;

Entity entity = list.get(rowCount - 1);
Field[] fields = entity.getClass().getDeclaredFields();

我无法访问对象的字段,因为实体字段必须是私有的。如果我使用 getDeclaredMethods() 而不是 getDeclaredFields() 方法,那么我无法使用列参数达到我想要的方法,因为有构造函数、设置器......

我的问题是;如何使用 AbstractTableModel 的 getValueAt(int row, int column) 方法的列参数获取实体的字段值

4

2 回答 2

2

您可以使用 getDeclaredFields() 访问类的所有私有字段。请参阅下面给出的代码:

import java.lang.reflect.Field;
import java.util.ArrayList;

class Private {
    private int i = 20;
    public String s = "java";
    private String name = "Object";
    private ArrayList<String> list = new ArrayList<String>()
    {
        {
            add("Hello");add("World");
        }
    };
}
public class Tester
{
    public static void main(String[] st)throws Exception
    {
        Private  p = new Private();
        Field[] fs = p.getClass().getDeclaredFields();
        for (Field f : fs )
        {
            f.setAccessible(true);
            System.out.println(f.get(p));
        }
    }
}
于 2013-03-14T19:37:57.570 回答
1

您也许可以使用Bean Table Model

于 2013-03-14T19:53:46.123 回答