【问题标题】:Problems with cells editing in JTableJTable中的单元格编辑问题
【发布时间】:2013-12-04 16:07:35
【问题描述】:

我在 JTable 中编辑单元格时遇到了一些问题。

首先,我创建了一个函数来处理按下 ENTER 时的水平滚动,当它到达最后一列时,它会从下一列的第一个单元格重新开始。这很好用,但问题是,当我单击一个单元格并将其设置为 editable 时,ENTER 不会触发操作(我必须按两次,一次用于停止编辑,第二次用于开始编辑下一个单元格)。它仅在选择单元格时识别按下 ENTER(仅第一次)。在此之后,当我继续按 ENTER 时,即使单元格是可编辑的,也会触发动作。

另一方面,我有一个单元格侦听器,用于在编辑某些单元格时执行一些操作,但在按下 ENTER 时它总是会触发两次。

那么,有什么建议吗?我希望我已经清楚地解释了这一点。

datosTabla = new Object[10][columnas_tabla.length];
    modelo = new DefaultTableModel(datosTabla, columnas_tabla);

    tabla = new JTable(modelo);

    CellEditorListener changeNotification = new CellEditorListener() {
        public void editingCanceled(ChangeEvent e) {

        }

        public void editingStopped(ChangeEvent e) {
            System.out.println("Do stuff");
        }
    };
    tabla.getDefaultEditor(Object.class).addCellEditorListener(changeNotification);

    Action handleEnter = new AbstractAction() {
        public void actionPerformed(ActionEvent e) {

            int row = tabla.getSelectedRow();
            int col = tabla.getSelectedColumn();

            if (col < modelo.getColumnCount() - 1){
                col++;
            } else {
                row++;
                col = 0;
            }
            tabla.changeSelection(row, col, false, false);
            tabla.editCellAt(row, col);
        }
    };

    tabla.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "handleEnter");
    tabla.getActionMap().put("handleEnter", handleEnter);

【问题讨论】:

  • 发布SSCCE 以获得更好的帮助
  • 对不起,链接是SSCCE

标签: java swing jtable tablecelleditor celleditorlistener


【解决方案1】:

问题是,当我点击一个单元格并 使其可编辑,然后 ENTER 不会触发动作(我必须推动 它两次,一次用于停止编辑,第二次用于开始编辑 下一个单元格)。仅在选择单元格时识别按 ENTER (仅第一次)。在此之后,当我 即使单元格是可编辑的,继续按 ENTER 键

您遇到了编辑器组件的焦点问题。

  1. 当您使用鼠标双击单元格时,您的单元格编辑器会获得焦点,任何使用按键的输入都会被反映,并且按 Enter 将被编辑器组件接收,但不会被表格接收。

  2. 1234563反映在编辑器上,当您再次单击 Enter 时,表格会收到它,停止编辑并转到下一个单元格。

作为一种解决方案,您可以声明一个自定义单元格编辑器并实现ActionListeneractionPerformed 函数以响应预期的行为。查看demo exampletutorial page example 了解实现思路和细节。

【讨论】:

  • 非常感谢您提供的信息。现在我更好地理解了 JTable 的工作原理。我会按你说的方式试试
猜你喜欢
  • 2013-05-30
  • 2019-04-30
  • 1970-01-01
  • 2011-09-27
  • 2010-12-07
  • 2010-12-22
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多