使用DbUtils将ResultSet转换为TableModel后,JTable将设置为可编辑。 如何让它再次不可编辑?

这是我执行此操作的代码

public static void addSong(String[] fileDetail, JTable SongData_Table) { try { con = DBConnection.getCon(); stmt = con.createStatement(); stmt.executeUpdate("insert into songs values (null,'" + fileDetail[0] + "', '" + fileDetail[1] + "',null,null)"); ResultSet rs = stmt.executeQuery("select * from songs"); TableModel model = DbUtils.resultSetToTableModel(rs); SongData_Table.setModel(model); if (con != null) { stmt.close(); con.close(); } } catch (SQLException e) { System.out.println("Error in Stmt " + e); } } 

变量名称不应以大写字符开头。 SongData_Table应该是songDataTable

覆盖JTable的isCellEditable(...)方法,而不是TableModel。

 JTable songDataTable = new JTable() { @Override boolean isCellEditatable(int row, int column) { return false; } }; 

DbUtils.resultSetToTableModel ,替换

 return new DefaultTableModel(rows, columnNames); 

并返回一个覆盖isCellEditable()TableModel

 return new DefaultTableModel(rows, columnNames){ @Override public boolean isCellEditable(int row, int column) { return false; } }; 

您可以覆盖方法isCellEditable:

  //instance table model DefaultTableModel tableModel = new DefaultTableModel() { @Override public boolean isCellEditable(int row, int column) { //all cells false return false; } }; table.setModel(tableModel); 

要么….

  table.setEnabled(false);