2014-09-19 47 views
0

这是我做this`使用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); 
    } 
} 

回答

2

变量名不应该与一个大写字母开头。 SongData_Table应该是songDataTable

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

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

您可以覆盖的方法的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); 
+0

的DefaultTableModel不DbUtils工作,我不能用table.setEnabled(假)作为后,我无法用点击表事件。 – 2014-09-19 23:35:51

+0

不要使用'setEnabled',这将禁用所有交互,包括行选择...不是一个好主意... – MadProgrammer 2014-09-20 02:18:02

+0

@AnandChokshi然后不要使用'DbUtils',因为'isCellEditable'方法是正确的方法使用.. – MadProgrammer 2014-09-20 02:18:54

2

DbUtils.resultSetToTableModel,更换

return new DefaultTableModel(rows, columnNames); 

,并返回一个TableModel重写isCellEditable()

return new DefaultTableModel(rows, columnNames){ 

    @Override 
    public boolean isCellEditable(int row, int column) { 
     return false; 
    } 
}; 
相关问题