1

1つの列からdataTableとcellEditorを作成します。この列は単純なjSpinnerです。次の問題があります。スピナーに値を入力して別の行を選択しても、前の行の値は変更されません。を押すと完了です。またはボタンを選択すると、それも実行されます。しかし、値を入力して選択を変更すると、それは実行されません。助けてください。これがCellEditorコードです。

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();
}

}

4

2 に答える 2

0

行うcommitEdit()

// Returns the spinners current value.
public Object getCellEditorValue() {
    spinner.commitEdit();
    return spinner.getValue();
}
于 2014-10-01T10:49:39.060 に答える
0

データ モデルをどのように更新しているかは明確ではありませんが、こので を実装ChangeListenerするのと同じように、 で実装するのが 1 つの方法です。参考として、表の使用方法: 他のエディターの使用を参照してください。特に、 を見てください。最後に、対応する.CellEditorItemListenerfireEditingStopped()TableCellRenderer

于 2011-01-23T12:58:19.370 に答える