代码之家  ›  专栏  ›  技术社区  ›  jacknad

Java:为什么JTable不使用TableCellEditor?

  •  3
  • jacknad  · 技术社区  · 15 年前

    我不希望下面的代码在第一次传递中起作用,但我确实希望在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();
        }
    }
    
    1 回复  |  直到 14 年前
        1
  •  7
  •   Mark Peters    15 年前

    setCellEditor(TableCellEditor) 设置当前的编辑器 积极的 仅限单元格(一旦不再处于活动状态将丢失)。你想打电话 JTable.setDefaultEditor() 为特定类设置默认编辑器。

    jTable.setDefaultEditor(String.class, tableCellEditor);
    

    TableColumnModel ,例如

    jTable.getColumnModel().getColumn(1).setCellEditor(tableCellEditor);