문제

The intention of MyTableCellEditor is to make a JTable cell behave like an Excel cell, IOW, entering a value after single clicking in a cell overwrites rather than appends to the existing value. I didn't expect the following code to work on the first pass, but I did expect to be hit debug breakpoints in getTableCellEditorComponent and getCellEditorValue. Why isn't getTableCellEditorComponent or getCellEditorValue called when I use 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();
    }
}
도움이 되었습니까?

해결책

setCellEditor(TableCellEditor) sets the editor for the currently active cell only (and will be lost once it's no longer active. You want to call JTable.setDefaultEditor() to set the default editor for a specific class.

jTable.setDefaultEditor(String.class, tableCellEditor);

Alternatively, you can set an editor for the column through the TableColumnModel, eg

jTable.getColumnModel().getColumn(1).setCellEditor(tableCellEditor);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top