2014-09-19 43 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; 
    } 
}; 
相關問題