2013-05-28 382 views
1

我創建使用Netbeans一個MasterDetail Simple Form,我有一個JTable這是關係到數據庫。使列不可編輯JTable中

我想編輯在此JTable列,使其不可編輯。

我Google一下吧,這一切我可以找到:

this.masterTable.getColumn("Validation").setEditable(false); 

,不會與我合作!

回答

9

重寫的TableModel的isCellEditable(...)方法。

DefaultTableModel model = new DefaultTableModel(...) 
{ 
    @Override 
    public boolean isCellEditable(int row, int column) 
    { 
     // add your code here 
    } 
} 

JTable table = new JTable(model); 
+0

我該怎麼做? –

+0

我無法重寫isCellEditable(...)方法,因爲我的對象直接擴展了JTable類。 –

+0

我已經使用它,但我的單元格仍然可編輯,我寫在isCellEditable返回列== 4但表中的所有單元格仍然可編輯,爲什麼? – mautrok

1
isCellEditable() 

這裏的Javadoc:isCellEditable(int, int) 是你想要的方法。如果您正在使用TableModel,則可以在該JTable實例的TableModel的子類中重寫此方法。

+0

我不知道如何使用它。 –

2

我發現使用GUI解決方案:

  • 在表格單元格上單擊右鍵。
  • 從彈出菜單中選擇「表格內容..」。
  • 取消選中您希望使其 不可編輯的列的可編輯複選框。

enter image description here

+4

不要使用GUI編輯器來建立UI,你不會學到太多東西。而是自己編寫代碼。 – Amarnath

3

禁止用戶在JTable的編輯多列

JTable table = new JTable(10, 4) { 
    @Override 
    public boolean isCellEditable(int row, int column) { 
     return column == 3 || column==4 || column==5 ? true : false; 
    } 
}; 
2

這裏是解決方案,如果您是直接擴展的JTable:(發生在構造函數中的代碼)

DefaultTableModel tableModel = new DefaultTableModel(data, colNames){ 

     @Override 
     public boolean isCellEditable(int row, int column) 
     { 
      // make read only fields except column 0,13,14 
      return column == 0 || column == 13 || column == 14; 
     } 
    }; 

this.setModel(TableModel的);