回答
如果是isEditable
爲TableColumn
或TableColumn and TableCell
太
@Override
public boolean isCellEditable(int row, int col) {
switch (col) {
case 0:
case 1:
return true;
default:
return false;
}
}
覆蓋的table model
isCellEditable(int rowIndex, int columnIndex)
有兩個參數,只爲你想要的列返回true,你可以設置?
public boolean isCellEditable(int rowIndex, int columnIndex){
return columnIndex == 0; //Or whatever column index you want to be editable
}
它是'columnIndex == 0'而不是'rowIndex == 0' –
啊,當然是愚蠢的錯字。固定。 – EricR
的SwingX項目JXTable/TableColumnExt有API來配置可編輯每個表和每列
// make the table completely read-only
xTable.setEditable(false);
// make a column read-only
xTable.getColumnExt(index).setEditable(false);
請注意,這是唯一可能的相比,通過模型返回到縮小的可編輯性。的isCellEditable。這是你可以使一個可編輯的單元格只讀,但不是相反方向
讀Kleopatra的評論(他第二次他建議看看javax.swing.JXTable,現在我很抱歉,我沒有看起來第一次:))我建議你按照鏈接
我搜索了一個asnwer,並結合了幾個答案給我自己的解決方案:(然而,並不安全的所有解決方案,但可以理解和快速推動,雖然我recommende看上面的鏈接)
你可以留着它更靈活的設置哪一列可編輯與否後來,我用這個爲〔實施例:
columnsEditable=new ArrayList<Integer>();
table=new JTable(new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int col) {
if(columnsEditable.isEmpty()){
return false;
}
if(columnsEditable.contains(new Integer(col))){
return true;
}
return false;
}
});
而且我用這個功能設置可編輯與否:
public void setColumnEditable(int columnIndex,boolean editable){
if(editable){
if(!columnsEditable.contains(new Integer(columnIndex))){
columnsEditable.add(new Integer(columnIndex));
}
}else{
if(columnsEditable.contains(new Integer(columnIndex))){
columnsEditable.remove(new Integer(columnIndex));
}
}
}
注:當然,你必須定義columnsEditable和JTable的表中該類全球:
private JTable table;
private ArrayList<Integer> columnsEditable;
注2 :默認情況下,所有列都不可編輯,但這是我期望的行爲。如果你想知道其他方面,可以將所有列添加到columnsEditable或完全更改行爲(使ArrayList columnsNonEditable取而代之)。 關於Kleopatra的評論:最好不要使用這最後的建議(但它取決於使用的表模型和你在你的程序的其餘部分做什麼)。
不是一個安全的解決方案:視圖_必須尊重模型的設置,所以無論你在視圖級別實現什麼,都只能縮小模型的可修改性,而不能擴大它。因此,在你的代碼的某個地方,你必須首先查詢模式,只有當返回true,保持或改變這一決定 – kleopatra
好,對於反饋意見的感謝,但可以很容易地實現,我認爲。我想要的是比編碼可編輯的列更硬編碼。但它是一個很好的事情考慮,改變colmns將改變這一點,但是我通常設置:table.getTableHeader()setReorderingAllowed(假)(例如) –
@kleopatra:思考過它,您的評論也取決於你用作表格模型。默認的TableModel始終是可編輯的,所以設置editabilty只會縮小它,從來沒有擴大。除了我的解決方案僅僅消耗其他解決方案的可能性。 –
對於第3列和第8列,這將設置爲可編輯的,對其他列爲false。
DefaultTableModel model = new DefaultTableModel() {
boolean[] canEdit = new boolean[]{
false, false, true, false, false,false,false, true
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit[columnIndex];
}
};
Thx @arash,很好的一段代碼。我稍微修改以禁用特定細胞,用下面的代碼... **'@覆蓋 \t \t \t公共布爾的isCellEditable(INT的rowIndex,INT columnIndex){ \t \t \t \t如果(rowIndex位置== 0 && columnIndex == 1){ \t \t \t返回FALSE;} \t \t \t \t返回canEdit [columnIndex]; }「** ......可這有用的禁用特定的細胞。 –
- 1. 拉力網格:只能編輯一列
- 2. RadDataGrid用戶只能編輯一列
- 3. 如何使JTable中只有一列可編輯
- 4. 編輯JTable行
- 5. 編輯Jtable屬性
- 6. 如何在java中編輯JTable
- 7. JTable行編輯器
- 8. 上編輯的JTable
- 9. JTable編輯模式
- 10. 未能僅編輯一列
- 11. 在JTable編輯事件後
- 12. 使列不可編輯JTable中
- 13. JTable上的複選框列編輯
- 14. 只做一列QTreeWidgetItem可編輯
- 15. MvcContrib網編輯只有一些列
- 16. 如何使一個jtable在java中不可編輯?
- 17. JTable與一個複雜的編輯器
- 18. JTable單元編輯器bug
- 19. 無法編輯JTable單元
- 20. 編輯:AWT-EventQueue-0 ArrayIndexOutOfBoundsException JTable
- 21. 使jtable不可編輯
- 22. 如何編輯JTable行?
- 23. 從RestulSet編輯JTable表
- 24. JTable在按鍵上編輯
- 25. JTable - 一列中的多個單元格編輯器
- 26. 如何製作一個特定的jTable布爾列可編輯
- 27. Java Swing jtable單元格編輯器使E編號翻倍
- 28. Java JTable排序不適用於只有一列
- 29. Java JTable不能設置列的寬度
- 30. 過濾JTable只有一個列
錯誤 - a)沒有方法可以在任何地方編輯b)TableColumn根本沒有可編輯性的概念c)TableCell不存在。正確的是_isCellEditable_或者在TableModel實現上或者在JTable上 - 對於sloppiness來說是-1 – kleopatra