2012-05-03 51 views
10

我创建了一个将数据加载到JTable中的函数。一切工作正常,但该表中的所有单元格都是可编辑的。顺便说一句,我用defaultTableModel为表模型。我在Netbeans IDE中这样做。请帮忙。这里是我的代码:如何使一个jtable在java中不可编辑?

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

这是更新数据模型的代码。相反,可编辑单元格必须与JTable相关。 –

+0

我强烈建议避免空的catch块,当然,如果你捕捉到任何可能的'例外' – Robin

+0

可能的重复[如何使一个JTable不可编辑](http://stackoverflow.com/questions/1990817/how -to-make-jtable-non-editable) – Math

回答

25
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的选择和自定义代码,如下图所示:

Navigator Pane

  • 在代码定制工具上,选择第二个下拉列表并选择定制属性。这使您能够编辑DefaultTableModel代码定义。
  • 现在贴出: {public boolean isCellEditable(int row, int column){return false;}}最后关闭黑框前);

你最后的安装看起来应该如下图所示:

  • 按OK键保存 - 和完成任务。

Code Customizer

+0

正确的建议+1 – mKorbel

+0

谢谢,但我不认为这会在我的代码中工作。我使用的默认表模型是由netbeans创建的。不幸的是,我不能编辑代码。有没有另外一种方法呢? – John

+0

您可以在Netbeans中执行'@ alain.janinm'已经发布了如何在Netbean设计器中执行此操作。 – Bitmap

6

如果你使用的DefaultTableModel,你可以构建GUI时覆盖的方法的isCellEditable,并实现它:

table.setModel(new DefaultTableModel() { 

    @Override 
    public boolean isCellEditable(int row, int column) { 
     return false; 
    } 
}); 
1

至于对方说,你必须创建自己DefaultTableModel和覆盖isCellEditable。为了使用它在Netbeans的设计师

  • 你的桌子上
  • 属性右键 - >代码
  • 自定义创建代码补充一点:new JTable(new MyModel())(假设你创建类为MyModel扩展AbstractTableModel上)
1

使用Netbeans的其他方式是可能的。 如果您想继续使用默认表模型作为OP提及 如果您不想创建新表模型,则不需要创建新表模型。

  1. 选择JTable中的 “属性”

  2. 在 “属性”,这将打开另一个对话框,选择 “TableModel的” 场。

  3. 从那里可以修改每列的“可编辑”复选框字段。

不知道从哪个版本开始,但我使用NetBeans 7.2

+0

小心解释你的downvote。此解决方案有效。 – user2485933

+0

这对我很好,我在NetBeans 7.0.1 – Gurce

0

尝试这个

JTable table = new JTable(); 
table.setEnabled(false); 
+1

添加一些细节 –