我创建了一个将数据加载到JTable
的函数。一切正常,但该表中的所有单元格都是可编辑的。顺便说一下,我使用defaultTableModel
作为表格模型。我在Netbeans IDE中这样做。请帮忙。这是我的代码:
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);
}
}
答案 0 :(得分:27)
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);
编辑。 如果您在 Netbeans IDE设计器中执行此操作,请按照以下步骤操作:
- 选择放置JTable的表单
- 在导航窗格中,展开JScrollPane并右键单击JTable并选择自定义代码,如下所示:
{public boolean isCellEditable(int row, int column){return false;}}
; 您的最终设置应如下所示:
答案 1 :(得分:6)
如果您使用DefaultTableModel,您可以覆盖方法isCellEditable并在构建GUI时实现它:
table.setModel(new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
});
答案 2 :(得分:2)
使用Netbeans可以采用另一种方式。 如果你想继续使用默认的表模型作为OP提及 如果您不想创建新的表格模型,则无需这样做。
选择JTable&#34;属性&#34;
选择&#34; TableModel&#34;字段&#34;属性&#34;这将打开另一个DialogBox。
从那里可以修改&#34;可编辑的&#34;每列的复选框字段。
不确定从哪个版本开始,但我使用的是Netbeans 7.2
答案 3 :(得分:1)
正如其他人所说,您必须创建自己的DefaultTableModel
并覆盖isCellEditable
。为了在Netbeans设计师中使用它:
new JTable(new MyModel())
(假设您创建类MyModel扩展AbstractTableModel)答案 4 :(得分:0)
试试这个
JTable table = new JTable();
table.setEnabled(false);
答案 5 :(得分:-1)
JTextField f = new JTextField();
f.setEditable(false);
for (int i = 0; i < table.getColumnModel().getColumnCount(); i++) {
table.getColumnModel().getColumn(i).setCellEditor(new DefaultCellEditor(f));
}