Reputation: 838
I created a function which loads data into a JTable
. Everything's working fine except that all the cells in this table are editable. Btw, I used defaultTableModel
for the table model. Im doing this in Netbeans IDE. Please help. Here's my code:
private void updateTable(String searchText){
if(searchText != null)
this._sqlCmd = this._sqlCmd + " WHERE "+columnCombo.getSelectedItem()+" LIKE '%"+searchText+"%'";
jTable1.setSurrendersFocusOnKeystroke(true);
table = (javax.swing.table.DefaultTableModel) jTable1.getModel();
try{
table.setRowCount(0);
}catch(Exception e){}
try {
ResultSet rs = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY).executeQuery(_sqlCmd);
while (rs.next()){
Object[] data = new Object[numOfCols];
for(int i=0; i<data.length; i++){
data[i] = rs.getObject(i+1);
}
table.addRow(data);
}
table.fireTableDataChanged();
} catch (SQLException ex) {
Logger.getLogger(FindContactGrid.class.getName()).log(Level.SEVERE, null, ex);
}
}
Upvotes: 11
Views: 53391
Reputation: 9
JTextField f = new JTextField();
f.setEditable(false);
for (int i = 0; i < table.getColumnModel().getColumnCount(); i++) {
table.getColumnModel().getColumn(i).setCellEditor(new DefaultCellEditor(f));
}
Upvotes: -1
Reputation: 31
Using Netbeans ANOTHER WAY is possible. if you want to continue using the default table model as the OP mentions It's not necessary to create a new table model if you don't want to.
Select the JTable "properties"
Select the "TableModel" field in "properties" which will open another DialogBox.
From there it is possible to modify the "editable" checkbox field for each column.
Not sure from which version this starts but I'm using Netbeans 7.2
Upvotes: 2
Reputation: 12538
private TableModel model = new DefaultTableModel(data, columnNames)
{
public boolean isCellEditable(int row, int column)
{
return false;//This causes all cells to be not editable
}
};
private JTable table = new JTable(model);
Edited. If you are doing this in Netbeans IDE designer, follow the steps below:
- Select the form on which the JTable is placed
- From the Navigation Pane, expand JScrollPane and right-click on JTable and Select Customize Code as shown below:
{public boolean isCellEditable(int row, int column){return false;}}
before the last closing blacket );Your final setup should look as shown below:
Upvotes: 34
Reputation: 20065
As other said you have to create you own DefaultTableModel
and override isCellEditable
. In order to use it in Netbeans designer :
new JTable(new MyModel())
(assuming you create class MyModel extends AbstractTableModel)Upvotes: 1
Reputation: 993
If you use DefaultTableModel you can override the method isCellEditable and implement it when constructing GUI:
table.setModel(new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
});
Upvotes: 9