Java 无法访问外部成员

Java 无法访问外部成员,java,Java,您的问题还不清楚,但我怀疑问题在于所有实例初始值设定项都是在构造函数主体之前运行的,因此您看到的是页面的默认值。您应该有如下内容: public ArrayList<GroupData> data = (new DatabaseLayer ()).getGroup(page); 公共类TableModel扩展了AbstractTableModel{ 私有静态最终字符串[]列名称= {“groupName”、“membersCount”、“previliage”};//TODO:修

您的问题还不清楚,但我怀疑问题在于所有实例初始值设定项都是在构造函数主体之前运行的,因此您看到的是
页面的默认值。您应该有如下内容:

public ArrayList<GroupData> data = (new DatabaseLayer ()).getGroup(page); 
公共类TableModel扩展了AbstractTableModel{
私有静态最终字符串[]列名称=
{“groupName”、“membersCount”、“previliage”};//TODO:修复拼写错误!
私人最终整版;
私人最终名单数据;
公共表格模型(int页){
this.page=page;
this.data=new DatabaseLayer().getGroup(第页);
}
...
}
通常,最好将所有实例/静态变量声明放在一个位置(我更喜欢将它们放在顶部,但是YMMV),并将它们全部私有化,以便更容易地解释它们的使用方式。然而,主要的变化是将
新的DatabaseLayer().getGroup(page)
代码移动到构造函数中。

公共类TableModel扩展了AbstractTableModel{
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);
    }

    ...
}
公共int页; 公共阵列列表数据; 公共表模型(整数p){ 本页=p; this.data=(新的DatabaseLayer()).getGroup(第页); 系统输出打印项次(“mm”+页); } 公共空间数据(){ 系统输出打印项次(第页); } //System.out.println(“模型”+页面); 私有字符串[]columnNames={“groupName”、“membersCount”、“previliage”}; @凌驾 public int getRowCount(){ 返回data.size(); }
每次为
页面
字段指定新值时,刷新
数据
字段

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

这是绝对正确的,因为:

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

public void setPage(int p) {
    this.page = p;
    this.data = new DatabaseLayer ().getGroup(page);
}
页面的默认值是
0
,因为它的
int

public int page;

请编辑您的帖子以修复缩进-缩进到处都是。所有这些代码都在同一个类中吗?请记住,在构造函数运行之前,所有初始化代码都将在初始化时运行-因此是的,
page
此时将为0。看起来您正在尝试在方法之外初始化变量。
page
在初始化
data
时为空…public ArrayList data=(新数据库层()).getGroup(第页);在构造函数内初始化此变量move
data=(新数据库层()).getGroup(第页);
到constructor@Mr.Polywhirl:不,它不会为空-它将为0。@SeniorJD:我不知道你的评论是什么意思。请提供更多详细信息。如果在
TableModel
对象初始化后
页面
字段可以更改,那么
数据
将不会刷新。@SeniorJD:True,并且我已经创建了变量final-但没有迹象表明OP想要这种能力,也没有迹象表明OP想要一种
setPage
方法。
public int page;
public ArrayList<GroupData> data = (new DatabaseLayer ()).getGroup(page);
private final List<GroupData> data;

public TableModel(Integer p) {
    this.page = p;
    this.data = new DatabaseLayer().getGroup(page);
    System.out.println("mm"+page); 
}