加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java:为什么JTable不使用TableCellEditor?

发布时间:2020-12-15 08:36:09 所属栏目:Java 来源:网络整理
导读:MyTableCellEditor的目的是使JTable单元的行为类似于Excel单元格IOW,单击单元格后输入一个值,而不是附加到现有值. 我没想到下面的代码会在第一次传递时工作,但我确实希望在getTableCellEditorComponent和getCellEditorValue中遇到调试断点. 当我使用jTable时
MyTableCellEditor的目的是使JTable单元的行为类似于Excel单元格IOW,单击单元格后输入一个值,而不是附加到现有值.
我没想到下面的代码会在第一次传递时工作,但我确实希望在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();
    }
}

解决方法

setCellEditor(TableCellEditor)仅为当前活动的单元格设置编辑器(一旦它不再处于活动状态,它将丢失.您希望调用JTable.setDefaultEditor()来设置特定类的默认编辑器.

jTable.setDefaultEditor(String.class,tableCellEditor);

或者,您可以通过TableColumnModel为列设置编辑器,例如

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读