I am trying to set a value in my jtablemodel using the setValueAt method whenever a header is clicked. I currently have a MouseAdapter correctly displaying which column is being clicked on but the board.setValueAt() method is not being called.
Mouse Listener. This correctly displays the column in which I click. I've tried to use board.getModel().setValueAt() but that didnt work either.
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);
}
}
TableModel. The "Set value at entered" never gets displayed to console. When I try to Override it it gives me an error.
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());
}
}
Main method board creation...
JTable board = new JTable(new TableModel());
board.getTableHeader().addMouseListener(new HeaderListener(board));
Can anyone tell me what I am doing wrong?
Your setValueAt method signature does not match that of the AbstractTableModel and thus does not override the super's own method. The first parameter should be Object, not Data. Always use the @Override
annotation when overriding methods to allow the compiler to check to be sure that you're doing it correctly.