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();

エンティティフィールドはプライベートである必要があるため、オブジェクトのフィールドに到達できません。また、getDeclaredFields()メソッドの代わりにgetDeclaredMethods()を使用した場合、コンストラクター、セッターがあるため、列パラメーターを使用して、目的のメソッドに到達できませんでした...

私の質問はそれです。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 に答える