3

MyTableCellEditor の目的は、JTable セルを Excel セル (IOW) のように動作させ、セルを 1 回クリックした後に既存の値に追加するのではなく、値を上書きするようにすることです。次のコードが最初のパスで機​​能するとは思っていませんでしたが、getTableCellEditorComponent と getCellEditorValue でデバッグ ブレークポイントにヒットすることは予想していました。jTable を使用しているときに getTableCellEditorComponent または getCellEditorValue が呼び出されないのはなぜですか?

public class MyTable extends javax.swing.JFrame implements TableModelListener {
    private static final MyTableCellEditor tableCellEditor =
        new MyTableCellEditor();
        ...
    public MyTable() {
        initComponents();
        jTable.getModel().addTableModelListener(MyTable.this);
        ...
    private void initComponents() { // Generated by the Form Editor.
        jTable = new javax.swing.JTable();
        jTable.setCellEditor(tableCellEditor);
        ...
public class MyTableCellEditor extends AbstractCellEditor implements
        TableCellEditor {
    JComponent component = new JTextField();
    public Component getTableCellEditorComponent(JTable table, Object value,
            boolean isSelected, int rowIndex, int vColIndex) {
        if (isSelected) {
            ((JTextField)component).selectAll();
        }
        ((JTextField)component).setText((String)value);
        return component;
    }
    public Object getCellEditorValue() {
        return ((JTextField)component).getText();
    }
}
4

1 に答える 1

7

setCellEditor(TableCellEditor)現在アクティブなセルのみのエディターを設定します (アクティブでなくなると失われJTable.setDefaultEditor()ます。特定のクラスの既定のエディターを設定するために呼び出す必要があります。

jTable.setDefaultEditor(String.class, tableCellEditor);

TableColumnModelまたは、を介して列のエディターを設定できます。

jTable.getColumnModel().getColumn(1).setCellEditor(tableCellEditor);
于 2010-11-02T13:55:44.193 に答える