java - AbstractTableModel setValueAt 方法未被调用

标签 java swing jtable mouselistener abstracttablemodel

每当单击标题时,我都会尝试使用 setValueAt 方法在 jtablemodel 中设置一个值。我目前有一个 MouseAdapter 正确显示正在单击的列,但未调用 board.setValueAt() 方法。

鼠标监听器。这会正确显示我单击的列。我尝试过使用 board.getModel().setValueAt() 但这也不起作用。

public class HeaderListener extends MouseAdapter{
    private JTable board;
    public HeaderListener(JTable board){
        this.board = board;
    }

    @Override
    public void mouseClicked(MouseEvent event) {
        Point point = event.getPoint();
        int column = board.columnAtPoint(point);
        System.out.println(column);
        Data value = new Data(0,"yes");
        board.setValueAt(value, 0, column);
    }
}

表模型。 “输入的设置值”永远不会显示到控制台。当我尝试覆盖它时,它给了我一个错误。

public class TableModel extends AbstractTableModel{
    private Data[][] data; 
    private String[] columnNames = {"Move Here",
                        "Move Here",
                        "Move Here",
                        "Move Here",
                        "Move Here","Move Here"};

    public TableModel(){
        data = new Data[6][7];
        Data test = new Data(0,"yes");
        data[1][1] = test;
    }

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

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }
    @Override
    public String getColumnName(int col) {
        return columnNames[col];
    }
    @Override
    public Object getValueAt(int row, int col) {
        return (data[row][col]==null?"":data[row][col].getText());
    }

    public void setValueAt(Data data2, int row, int col){
        System.out.println("Set value at entered");
        data[row][col] = data2;
        fireTableCellUpdated(row,col);
        System.out.println(data[row][col].getText());
        System.out.println(data[row][col].getPlayer());
    }

}

主要方法板创建...

JTable board = new JTable(new TableModel());
board.getTableHeader().addMouseListener(new HeaderListener(board));

谁能告诉我我做错了什么?

最佳答案

您的 setValueAt 方法签名与 AbstractTableModel 的签名不匹配,因此不会覆盖 super 自己的方法。第一个参数应该是对象,而不是数据。重写方法时始终使用 @Override 注释,以允许编译器检查以确保您的操作正确。

关于java - AbstractTableModel setValueAt 方法未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26442590/

相关文章:

java - JTable - 使用 PopupMenu 切换列(如 Windows 资源管理器)

java - 从 JTable 获取每一行值

java - 测试分布

java - 尝试一次只运行 5 个线程的 selenium webdriver,重复直到运行 200 个线程

java - 使用类的普通方法调用 actionPerformed 方法

java - 借助组合框进行 JTable 选择?

java - 创建 JFileChooser 对话框时如何选择默认的 FileFilter?

java - Jtable - getvalueAt() 问题

java - 运行在 Redhat 上的配置文件 Tomcat 实例

java - 让 JEditorPane 工作