2011-01-23 9 views
1

私はdataTableとcellEditorフォームを1列作成します。この列は単純なjSpinnerです。私は次の問題があります。スピナーに値を入力して別の行を選択すると、前の行の値は変更されません。私が押すと、完了します。選択するかボタンを押すと、それも完了します。しかし、私が価値を入力して選択を変更すれば、それは行われません。助けてください。ここにCellEditorコードがあります。JSpinnerアップデート

public class DurationTableCellEditor extends AbstractCellEditor implements TableCellEditor{ 

final JSpinner spinner = new JSpinner(); 

// Initializes the spinner. 
public DurationTableCellEditor() { 
    spinner.setModel(new SpinnerNumberModel(1,1,50000,1));   
} 

// Prepares the spinner component and returns it. 
public Component getTableCellEditorComponent(JTable table, Object value, 
     boolean isSelected, int row, int column) { 
    spinner.setValue(new Integer(value.toString()).intValue()); 
    spinner.setCursor(null); 
    return spinner; 
} 

// Enables the editor only for double-clicks. 
@Override 
public boolean isCellEditable(EventObject evt) { 
    if (evt instanceof MouseEvent) { 
     return ((MouseEvent)evt).getClickCount() >= 1; 
    } 
    return true; 
} 

// Returns the spinners current value. 
public Object getCellEditorValue() { 
    return spinner.getValue(); 
} 

}

答えて

0

それはあなたのデータモデルを更新しているかは明らかではないが、一つのアプローチは、このexampleItemListenerを実装限り、あなたのCellEditorChangeListenerを実装することであろう。参考までにHow to Use Tables: Using Other Editorsを参照してください。特に、fireEditingStopped()をご覧ください。最後に、対応するTableCellRendererが必要です。

0

行うcommitEdit()

// Returns the spinners current value. 
public Object getCellEditorValue() { 
    spinner.commitEdit(); 
    return spinner.getValue(); 
}