【问题标题】:Single click to edit a JTable Cell单击以编辑 JTable 单元
【发布时间】:2011-11-15 06:30:13
【问题描述】:

目前 JTable 单元格在第一次单击时被选中,在第二次单击时被编辑。

是否可以在第一次点击时直接编辑它?

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

    在 DefaultCellEditor api 中有一个名为 setClickCountToStart 的方法

        DefaultCellEditor singleclick = new DefaultCellEditor(new JTextField());
        singleclick.setClickCountToStart(1);
    
        //set the editor as default on every column
        for (int i = 0; i < table.getColumnCount(); i++) {
            table.setDefaultEditor(table.getColumnClass(i), singleclick);
        } 
    

    【讨论】:

    • 嗨,这个剂量似乎有效,它适用于 javax.swing.table.TableColumn col = jTable1.getColumnModel().getColumn(1); DefaultCellEditor 单击 = new DefaultCellEditor(new JTextField()); singleclick.setClickCountToStart(1); col.setCellEditor(单击);这仅适用于 1 列,是否可以一次用于整个表?
    • for(int i=0; i&lt;table.getColumnModel().getColumnCount();i++){ TableColumn col = table.getColumnModel().getColumn(i); col.setCellEditor (singleclick); } 但这不是美丽的方式
    【解决方案2】:

    关于扩展 DefaultCellEditor 的已发布答案确实有效,我已经使用它,除了将我们应用程序的外观更改为 Nimbus 时,较厚的默认 JTextField 边框会侵入表格单元格,使文本无法阅读。

    原因是默认表格单元格编辑器是 JTable$GenericEditor 而不是 DefaultCellEditor(它是它的直接子类),前者在getTableCellEditorComponent() 中有以下关键行:

    ((JComponent)getComponent()).setBorder(new LineBorder(Color.black));
    

    JTable$GenericEditor 是包私有的,所以不能被子类化,但是 JTable 提供了一个getDefaultEditor() 方法,所以我要做的就是:

    ((DefaultCellEditor) myJTable.getDefaultEditor(Object.class)).setClickCountToStart(1);
    

    或者如果您想满足表中所有可能的列类(例如,如果您的列之一是数字):

    for (int i = 0; i < myJTable.getColumnModel().getColumnCount(); i++) {
        final DefaultCellEditor defaultEditor = (DefaultCellEditor) myJTable.getDefaultEditor(myJTable.getColumnClass(i));
        defaultEditor.setClickCountToStart(1);
    }
    

    【讨论】:

      【解决方案3】:

      在单元格编辑器上使用setClickCountToStart(1)

      【讨论】:

        猜你喜欢
        • 2014-05-27
        • 1970-01-01
        • 1970-01-01
        • 2014-05-08
        • 2019-04-30
        • 1970-01-01
        • 2016-11-18
        • 2023-03-23
        • 1970-01-01
        相关资源
        最近更新 更多