我正在尝试为名为“clients”的集合实现AbstractTableModel
,但我仍然收到“add”方法的错误“required variable found value”。
这是我的代码:
我很抱歉造成了混乱。 add方法是为了在表中添加一个新客户端(我指的是一个新行)。我不想在集合中添加新客户端。
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();
}
}
答案 0 :(得分:3)
喜欢这个
变化
clients.get(clients.size()++) = a;
到
clients.add(c);
现在您的方法看起来像
public void add(Client c) {
clients.add(c);
fireTableDataChanged();
}
}
不确定如何获得clients.size();相信客户收集出现在ModelTabel类中。
答案 1 :(得分:3)
你不能++
方法的返回值,因为++
的参数必须是在赋值左侧有效的东西。如果您想在Collection
的末尾添加内容,那么正确的方法是使用add
方法。
clients.add(a);
此外,您应该触发更具体的修改事件,而不仅仅是“更改表格”。调用fireTableDataChanged
本质上告诉听众“此模型中的数据已经变得无法识别,丢弃了当前的可视化表示并构建了一个全新的视觉表示”。如果使用
fireTableRowsInserted(clients.size() - 1, clients.size() - 1);
具体说明“在此模型的末尾添加了一个新行,但其余数据未更改”。
答案 2 :(得分:2)
保持简单。你有客户的辩护人吗?
class ModelTabel extends AbstractTableModel{
ArrayList<Client> clients = new ArrayList<Client>();
public int getRowCount() {
return clients.size();
}
public int getColumnCount() {
return 4;
}
public Object getValueAt(int row, int column) {
Client c = clients.get(row);
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.add(c);
fireTableDataChanged();
}
}
答案 3 :(得分:0)
请显示完整的错误消息,而不是错误的解释。请显示导致错误的文本行。
话虽如此,您的客户在哪里可变?宣布在哪里?初始化?我认为你的模型需要这个才能发挥作用。
答案 4 :(得分:0)
我认为这与this question的问题相同......您的变量分配正好相反。
它应该是(虽然这段代码仍然不正确 - 见下文):
a = clients.get(clients.size()++);
编辑:Prabhakaran已经回答了这个问题,但显然人们觉得有必要回答我的答案。我想我确实解决了原来的问题,但我很欣赏我的代码示例仍然不正确,所以我会尝试提供一个更完整的答案:
首先,关于“未找到所需变量”错误,如果你谷歌它,你会看到其他SO问题作为第一个命中。 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)
调用 - 因为它似乎符合该方法的原始意图。
答案 5 :(得分:0)
如果你展示你的收藏(我假设它是一个列表?)正在宣布它会有所帮助。
话虽如此,你的添加方法没有意义:我认为你的意思是:
{
clients.add( c );
fireTableDataChanged()
}