0
public class TableModel extends AbstractTableModel {
    public int page;
    public TableModel(Integer p) {                
        this.page=p;
        System.out.println("mm"+page);    
    }

    public void pudata() {
        System.out.println(page);
    }
    //System.out.println("model "+page);
    private String[] columnNames = {"groupName","membersCount","previliage"};

    public ArrayList<GroupData> data = (new DatabaseLayer ()).getGroup(page);

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

无法访问方法中的变量pagegetgroup()它将 0 传递给getgroup()方法。

public ArrayList<GroupData> data = (new DatabaseLayer ()).getGroup(page); 
4

4 回答 4

1

您的问题尚不清楚,但我怀疑问题只是所有实例初始化程序都在构造函数主体之前运行,因此您看到page. 你应该有类似的东西:

public class TableModel extends AbstractTableModel {
    private static final String[] columnNames =
        {"groupName","membersCount","previliage"}; // TODO: Fix spelling!
    private final int page;
    private final List<GroupData> data;

    public TableModel(int page) {
        this.page = page;
        this.data = new DatabaseLayer().getGroup(page);
    }

    ...
}

将所有实例/静态变量声明保存在一个地方通常是一个好主意(我更喜欢将它们放在顶部,但 YMMV)并将它们全部设为私有,以便更容易理解它们的使用方式。然而,主要的变化是将new DatabaseLayer ().getGroup(page)代码移动到构造函数中。

于 2013-06-24T10:00:52.060 回答
0
public class TableModel extends AbstractTableModel {
    public int page;
    public ArrayList<GroupData> data;
    public TableModel(Integer p) {                
        this.page=p;
        this.data  = (new DatabaseLayer ()).getGroup(page);
        System.out.println("mm"+page);    
    }

    public void pudata() {
        System.out.println(page);
    }
    //System.out.println("model "+page);
    private String[] columnNames = {"groupName","membersCount","previliage"};



    @Override
    public int getRowCount() {
        return data.size() ;
    }
于 2013-06-24T10:03:00.160 回答
0

data每次为字段分配新值时刷新page字段。

public TableModel(int p) {
    setPage(p);
}

public void setPage(int p) {
    this.page = p;
    this.data = new DatabaseLayer ().getGroup(page);
}
于 2013-06-24T10:03:33.367 回答
0

这是绝对正确的,因为:

public int page;

page 的默认值是0因为它的int.

public ArrayList<GroupData> data = (new DatabaseLayer ()).getGroup(page);

是变量初始化,因此在初始化之前page将其传递给.getGroup(page)默认值,因此在这种情况下将传递默认值。

所以你必须在初始化getGroup(int)后调用方法page,一种方法可以是:

private final List<GroupData> data;

public TableModel(Integer p) {
    this.page = p;
    this.data = new DatabaseLayer().getGroup(page);
    System.out.println("mm"+page); 
}
于 2013-06-24T10:04:05.573 回答