2009-11-17 68 views
0

我正在用Java創建一個應用程序。在編輯JTable中的單元格時,我需要提供其他行爲。所以理想情況下,當編輯後單元失去焦點時會發生這種情況。根據一些後處理,我可能會重置單元格的值。我嘗試使用一個單元格編輯器,但它沒有給我所需的行爲。在JTable中編輯單元格時提供額外的行爲

僅當我雙擊單元格時,纔會在默認的JTable中變爲可編輯。但是在我的CellEditor實現中,單元格一旦焦點就變得可編輯。

這裏是我的自定義CellEditor的代碼,

public class ParameterDefinitionEditor 
    extends AbstractCellEditor 
    implements TableCellEditor{ 

    private JTable table; 
    private DefaultTableModel defaultTableModel; 

public ParameterDefinitionEditor(DefaultTableModel defaultTableModel, 
JTable table) { 

     super(); 
     this.table = table; 
     this.defaultTableModel = defaultTableModel; 

     TableColumnModel columnModel = table.getColumnModel(); 
     columnModel.getColumn(0).setCellEditor(this); 

} 

    public Component getTableCellEditorComponent(JTable table, 
          Object value, 
         boolean isSelected, 
         int row, 
         int column) { 

     if (isSelected) { 
      // Do some processing. 
     } 

     ((JTextField)component).setText((String)value); 

     // Return the configured component 
     return component; 
    } 

    public Object getCellEditorValue() { 

     return ((JTextField)component).getText(); 
    } 


} 

任何幫助將不勝感激。謝謝。

+0

備案:這是一個無效的實現CellEditor中的 - 當終止編輯它_must_通知其監聽器內部原因! – kleopatra 2012-09-11 07:05:41

回答

2

取決於一些後處理我 可能會重置的單元格的值。

如果您希望重寫stopCellEditing()方法,您可以在單元格編輯器中正確執行此操作。

在默認的JTable中,只有當我雙擊單元格時,它纔會變爲 。但是在我實現 CellEditor時,一旦它變得焦點,單元格就變爲可編輯的 。

擴展DefaultCellEditor。這由setClickCountToStart()方法控制。

所以最好在 細胞失去焦點編輯

我,你或許應該加上TableModelListener到TableModel的其他建議,同意後,會出現這種情況。雖然取決於你的要求,你可能要考慮使用Table Cell Listener

+0

我其實很喜歡你在鏈接上放置的TableCellListener例子。但我的環境是Java 1.5,所以實際上我不能使用該實用程序,因爲「convertRowIndexToModel」在1.5中不可用。有沒有解決方法? – Chantz 2009-11-17 17:46:59

+0

另外,雖然我們在它,有沒有辦法禁用某些列的這種行爲? – Chantz 2009-11-17 19:41:28

1

我實現了類型的行爲通過覆蓋stopCellEditing(我用AbstractCellEditor的自定義實現)

public boolean stopCellEditing() 
{ 
String s = (String) getCellEditorValue(); 
if (! valueValidator.isValid(s)) 
    { 
    editorComponent.setBorder(new LineBorder(Color.red));   
    Toolkit.getDefaultToolkit().beep(); 
    return false; 
    } 
} 
else { ........ 
相關問題