java - JTable setValueAt不工作

时间:2014-03-21 18:04:15

标签: java swing netbeans jtable indexoutofboundsexception

我正在做一个国际象棋游戏,我需要制作一个打印每一步的日志表。 LogTable类是这样的:

public class LogTable {
    private DefaultTableModel model;
    private JTable table;
    public LogTable(JPanel panel){
        String[] columnNames = {"Move No.",
                                "White",
                                "Black"};

        model = new DefaultTableModel(columnNames, 0);
        table = new JTable();
        //model.isCellEditable(i, i1)
        table.setModel(model);

        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
        table.setFillsViewportHeight(true);

        //Create the scroll pane and add the table to it.
        JScrollPane scrollPane = new JScrollPane(table);

        panel.add(scrollPane);
    }

    public void newMove(chessPiece piece){
        if (piece.getColor() == 0){
            Object[] newRow = new Object[3];
            newRow[0] = model.getRowCount()+1;
            newRow[1] = piece.sayPos();
            newRow[2] = " ";
            model.addRow(newRow);
        }
        else {
            model.setValueAt(piece.sayPos(), model.getRowCount(), model.getColumnCount());
        }
    }
}

但是在第一次黑色移动中它产生了一个ArrayOutOfBoundsException。 newMove函数在chessPiece类中调用:

public void move(int newX, int newY, JPanelSquare jPanelSquareGrid[][], LogTable logTable){
    resetShowValidMoves(jPanelSquareGrid);
    logTable.newMove(this);
}

其余的移动代码在每个部分,称为超级。我使用的是DefaultTableModel。

1 个答案:

答案 0 :(得分:1)

来自Java API

public DefaultTableModel(Object[] columnNames,int rowCount)
  

使用与中的元素一样多的列构造DefaultTableModel   columnNames和rowCount的null对象值。每列的名称   将从columnNames数组中获取。

您将DefaultTableModel实例化为0行。因此,您无法设置第0行中项目的值,因为它不存在。