java - 为 Java 集合实现 AbstractTableModel

标签 java swing jtable tablemodel

我正在尝试为名为“clients”的集合实现一个 AbstractTableModel,但我不断收到“add”方法的错误“requiredvariablefoundvalue”。 这是我的代码:

对于造成的困惑,我深表歉意。 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();
        }
    }

最佳答案

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

clients.add(a);

此外,您应该触发一个更具体的修改事件,而不仅仅是“表已更改”。调用 fireTableDataChanged 本质上是告诉听众“此模型中的数据已更改得无法识别,丢弃当前的视觉表示并构建一个全新的视觉表示”。如果您使用它,它会更加高效并提供更好的用户体验

fireTableRowsInserted(clients.size() - 1, clients.size() - 1);

其中明确表示“已在该模型的末尾添加了一个新行,但其余数据未更改”。

关于java - 为 Java 集合实现 AbstractTableModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20683502/

相关文章:

java - 用 "*"替换最后 4 个字符

java - 将 UTC 时间从 MySQL 转换为本地时区

java - 如何让 Java 托盘图标消息淡出?

java - 设置 JTable 列的原型(prototype)值(用于自动宽度计算)

java - 扩展DefaultTableCellRenderer,getTableCellRendererComponent中没有创建新对象?

java - 从当前日期开始以秒为单位获取日期时间

Javadoc 使用相对路径链接到 src/main/resource 或 src/test/resource 文件

java - JTextPane .getText() 不保留 HTML 的空白?

Java滚动条选项

java - 如何强制 jTable 不可编辑?