11

我创建了一个将数据加载到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);
    } 
}
4

6 回答 6

34
 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 并选择自定义代码,如下所示:

导航器窗格

  • 在代码定制器上,选择第二个下拉菜单并选择custom property。这使您能够编辑 DefaultTableModel 代码定义。
  • 现在粘贴这个: {public boolean isCellEditable(int row, int column){return false;}}在最后一个关闭 blacket 之前);

您的最终设置应如下所示:

  • 按确定保存 - 并完成工作。

代码定制器

于 2012-05-03T13:31:20.707 回答
9

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

table.setModel(new DefaultTableModel() {

    @Override
    public boolean isCellEditable(int row, int column) {
       return false;
    }
});
于 2012-05-03T13:38:39.440 回答
2

使用 Netbeans 的另一种方式是可能的。如果您想继续使用 OP 提到的默认表模型,如果您不想创建新的表模型,则没有必要。

  1. 选择 JTable 的“属性”

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

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

不确定从哪个版本开始,但我使用的是 Netbeans 7.2

于 2014-08-27T16:30:40.173 回答
2

尝试这个

JTable table = new JTable();
table.setEnabled(false);
于 2017-11-16T02:14:31.323 回答
1

正如其他人所说,您必须创建自己的DefaultTableModel并覆盖isCellEditable。为了在 Netbeans 设计器中使用它:

  • 右键单击您的表
  • 属性 -> 代码
  • 自定义创建代码中添加:(new JTable(new MyModel())假设您创建类 MyModel 扩展 AbstractTableModel)
于 2012-05-03T13:52:13.803 回答
-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));
}
于 2019-09-14T16:38:17.097 回答