Java: почему JTable не использует TableCellEditor? - PullRequest
3 голосов
/ 02 ноября 2010

Цель MyTableCellEditor состоит в том, чтобы заставить ячейку JTable вести себя как ячейка Excel, т.е. вводить значение после однократного щелчка в ячейке, а не добавлять к существующему значению.Я не ожидал, что следующий код будет работать на первом проходе, но я ожидал попадания в точки отладки в getTableCellEditorComponent и getCellEditorValue.Почему не вызывается getTableCellEditorComponent или getCellEditorValue при использовании jTable?

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

1 Ответ

7 голосов
/ 02 ноября 2010

setCellEditor(TableCellEditor) устанавливает редактор только для текущей активной ячейки (и будет потерян, когда она перестанет быть активной. Вы хотите вызвать JTable.setDefaultEditor(), чтобы установить редактор по умолчанию для определенного класса.

jTable.setDefaultEditor(String.class, tableCellEditor);

В качестве альтернативы вы можете установить редактор для столбца через TableColumnModel, например,

jTable.getColumnModel().getColumn(1).setCellEditor(tableCellEditor);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...