重寫 DefaultTableModel.isCellEditable(int row, int column) 即可實現細粒度編輯控制。方法接收行列索引,返回 true 允許編輯,false 禁止。
DefaultTableModel model = new DefaultTableModel(data, columns) {
@Override public boolean isCellEditable(int row, int column) { return false; }
};
public boolean isCellEditable(int row, int column) {
return column == 2; // 0-based 索引
}
public boolean isCellEditable(int row, int column) {
return row == 1 && column == 1;
}
public boolean isCellEditable(int row, int column) {
return row == 3 || row == 5;
}
public boolean isCellEditable(int row, int column) {
if (column == PRICE_COL) {
Object qtyObj = getValueAt(row, QTY_COL);
return qtyObj instanceof Integer && (Integer) qtyObj > 0;
}
return false;
}
isCellEditable 而非匿名內部類CellEditableStrategy 介面,支援熱插拔