Чтение замечания Клеопатры (его второй раз он предложил посмотреть на javax.swing.JXTable , и теперь мне жаль, что я не посмотрел в первый раз :)) Япредлагаю вам перейти по ссылке
Я искал ответ, и я объединил несколько ответов для своего собственного решения: (однако, небезопасно для всех решений, но понятно и быстро реализуемо, хотя я рекомендую взглянуть на ссылкувыше)
Вы можете сделать его более гибким, чтобы указать, какой столбец будет редактироваться или нет, я использовал это для примера:
columnsEditable=new ArrayList<Integer>();
table=new JTable(new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int col) {
if(columnsEditable.isEmpty()){
return false;
}
if(columnsEditable.contains(new Integer(col))){
return true;
}
return false;
}
});
И я использовал эту функцию, чтобы установить редактируемый или нет:
public void setColumnEditable(int columnIndex,boolean editable){
if(editable){
if(!columnsEditable.contains(new Integer(columnIndex))){
columnsEditable.add(new Integer(columnIndex));
}
}else{
if(columnsEditable.contains(new Integer(columnIndex))){
columnsEditable.remove(new Integer(columnIndex));
}
}
}
Примечание: конечно, вы должны определить глобальные таблицы columnsEditable и JTable в этом классе:
private JTable table;
private ArrayList<Integer> columnsEditable;
Примечание 2: по умолчанию все столбцы недоступны для редактирования, но этомое желаемое поведение.Если вы хотите другое, либо добавьте все столбцы в columnsEditable, либо полностью измените поведение (вместо него сделайте ArrayList columnsNonEditable).Что касается замечания Клеопатры: лучше не использовать это последнее предложение (но это зависит от используемой табличной модели и того, что вы делаете в остальной части вашей программы).