Когда компонент JTable создается, редактирование ячеек включено по умолчанию. Как я могу запретить пользователю редактировать содержимое JTable?
Отключить редактирование пользователя в JTable
Ответ 1
JTable использует объект AbstractTableModel. Это то, что вы передаете в конструктор JTable. Вы можете написать свой собственный AbstractTableModel следующим образом
public class MyTableModel extends AbstractTableModel {
public boolean isCellEditable(int row, int column){
return false;
}
}
а затем инициализируйте JTable как
JTable myTable = new JTable(new MyTableModel());
Ответ 2
Вы можете создать JTable, используя следующий код:
JTable jTable = new JTable() {
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int row, int column) {
return false;
};
};
В основном то, что мы делаем здесь, переопределяет isCellEditable
и всегда возвращает false из него. Это сделает не редактируемую JTabel.
Ответ 3
myTable.setDefaultEditor(Object.class, null);
Ответ 4
Привет, я много работаю над java, поэтому я дам вам свой путь: Есть две возможности первой под netbeans. Перейдите к настройке кода и сделайте так:
JTArticleJPAddArrticle = new javax.swing.JTable();
JTArticleJPAddArrticle.setBackground(new java.awt.Color(204, 204, 255));
JTArticleJPAddArrticle.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Reference","Libellé","Marque","Prix d'achat","Prix de vente","Quantité","Total","Etat"
}
){
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
});
jScrollPane8.setViewportView(JTArticleJPAddArrticle);
Мой другой способ - сделать экземпляр модели таблицы. Это второй способ:
model=new DefaultTableModel(head, 0){
@Override
public boolean isCellEditable(int i, int i1) {
return false; //To change body of generated methods, choose Tools | Templates.
}
};
jtable.setmodel(model);
Наслаждайтесь, что это хорошо работает для меня. Все, что я хочу сделать, это помочь вам, ребята, потому что мне помогли намного раньше.
Ответ 5
Пробовали ли вы просто:
JTable table = new JTable();
table.setEnabled(false);
О JComponent.setEnabled(boolean) это говорит:
Устанавливает, включен ли этот компонент. Компонент, который включен, может реагировать на ввод пользователя, а компонент, который не включен, не может реагировать на ввод пользователя. Некоторые компоненты могут изменять свое визуальное представление, когда они отключены, чтобы обеспечить обратную связь с пользователем, что они не могут принимать входные данные.
Когда дело доходит до JTable, похоже, он вообще не дает никакой визуальной обратной связи. С перком все еще можно нажать на заголовки столбцов. И в моей реализации приложение все равно может изменить содержимое ячеек.
Ответ 6
tm = new javax.swing.table.DefaultTableModel()
{
public Class<?> getColumnClass(int column)
{
switch(column)
{
case 0:
return String.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return String.class;
case 5:
return String.class;
case 6:
return String.class;
case 7:
return String.class;
case 8:
return String.class;
case 9:
return String.class;
case 10:
return String.class;
case 11:
return Boolean.class;
default:
return String.class;
}
}
@Override
public boolean isCellEditable(int row, int column) {
/* Set the 11th column as editable and rest non-
editable */
if(column==11){
return true;
}else{
//all other columns to false
return false;
}
}
};
table = new javax.swing.JTable(tm);
В этом методе "isCellEditable" мы можем включать и отключать пользовательское редактирование для определенного столбца. В этом случае включите столбец = 11 и отключите оставшуюся часть столбца
Ответ 7
Что касается NetBeans, вы можете щелкнуть правой кнопкой мыши по таблице и щелкнуть по содержимому таблицы, затем перейдите на вкладку столбца и снимите флажок "Редактируемый". Привет!!
Ответ 8
Я знаю, что я опоздал, но надеюсь, что кто-то получит это. Вы можете просто добавить слушателя мыши следующим образом:
jtable.addMouseListener( new MouseAdapter () {
@Override
public void mouseClicked ( MouseEvent e ) {
columnIndex = replacedAssets.getSelectedColumn ();
System.out.println ( "Double click on jtable" );
if ( columnIndex == 1 || columnIndex == 2 ) {
JOptionPane.showMessageDialog ( parent , "Editing this Field may cause error in the data." , "Error Edit Not Permitted For This Field" , JOptionPane.ERROR_MESSAGE );
}
}
});
этот код запрещает редактирование столбцов индексов 1 и 2, вы можете удалить условие if, чтобы это работало для всех столбцов.