首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Java集合实现AbstractTableModel

为Java集合实现AbstractTableModel
EN

Stack Overflow用户
提问于 2013-12-19 13:53:15
回答 6查看 441关注 0票数 2

我试图为一个名为"clients“的集合实现一个AbstractTableModel,但是我一直收到"add”方法的错误“必需变量查找值”。这是我的代码:

我很抱歉造成了混乱。add方法的意思是在表中添加一个新客户端(我的意思是新行)。我不想在集合中添加一个新客户端。

代码语言:javascript
复制
class ModelTabel extends AbstractTableModel{

    public int getRowCount() {
        return clients.size();
    }

    public int getColumnCount() {
        return 4;
    }

    public Object getValueAt(int row, int column) {
        Client c = clients.get(row-1);
        switch(column){
            case 0: return c.getName();
            case 1: return c.getSurname();
            case 2: return c.getID();
            case 3: return c.getPhone();
            default:return "ERROR";
        }
    }

    public void add(Client c) {
        clients.get(clients.size()++) = a;
        fireTableDataChanged();
        }
    }
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-12-19 13:58:44

我相信这是和this question一样的问题.你的变量分配被颠倒了。

应该是这样(尽管这段代码仍然不正确-参见下面):

代码语言:javascript
复制
a = clients.get(clients.size()++);

编辑:这已经得到了普拉巴卡兰的回答,但显然人们觉得有必要否决我的回答。我想我确实回答了原来的问题,但我理解我的代码示例仍然不正确,所以我将尝试提供一个更完整的答案:

首先,关于“必需变量未找到”错误,如果你谷歌它,你会看到其他这样的问题,作为第一个命中。clients.get(clients.size()++)不是一个变量,所以您不能给它赋值。我不确定a在代码中声明的位置,但假设它是一个变量,因此我建议逆转赋值。

接下来,对于clients.get(clients.size()++)行,正如其他人提到或暗示的那样- VAR++等同于VAR = VAR + 1,同样也是正在进行的赋值操作。在这种情况下,clients.size()不是变量,所以不能增加它。如果你想要clients.size() + 1索引,你可以写:a = clients.get(clients.size() + 1).但是这会抛出一个ArrayIndexOutOfBoundsException,因为您正在尝试访问clients的一个元素,而不是它当前的大小!

这就是为什么Prabhakaran像他们一样重写了您的方法,将该行更改为clients.add(c)调用--因为它似乎符合该方法的初衷。

票数 0
EN

Stack Overflow用户

发布于 2013-12-19 13:59:06

就像这样

变化

代码语言:javascript
复制
clients.get(clients.size()++) = a;

代码语言:javascript
复制
clients.add(c); 

现在你的方法看起来就像

代码语言:javascript
复制
public void add(Client c) {
    clients.add(c); 
    fireTableDataChanged();
    }
}

不确定如何获得clients.size();相信客户端集合在ModelTabel类中。

票数 3
EN

Stack Overflow用户

发布于 2013-12-19 14:00:52

您不能从方法中++返回值,因为++的参数必须在赋值的左侧有效。如果您想要向Collection的末尾添加一些内容,那么正确的方法是使用add方法。

代码语言:javascript
复制
clients.add(a);

此外,您应该触发一个比简单的“表更改”更具体的修改事件。调用fireTableDataChanged本质上告诉侦听器“该模型中的数据已发生了无法识别的变化,丢弃了当前的视觉表示,转而构建了一个全新的表示”。如果您使用的是

代码语言:javascript
复制
fireTableRowsInserted(clients.size() - 1, clients.size() - 1);

它明确表示“在该模型的末尾添加了一个新行,但其余的数据没有变化”。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20683502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档