java - JTable - 按 Tab 键让单元格进入编辑模式

标签 java swing jtable

这可能有一个简单的解决方案,但我已经筋疲力尽了,所以我希望有人能帮忙。

我使用一个 JTable,它有一个自定义渲染器和一个用于一组列的自定义编辑器。
渲染器使用 JLabel 组件,编辑器使用 JSpinner 组件。
我们的用户希望能够在列中输入值,然后按 TAB 或 ENTER 移动到表中的下一个可编辑单元格。
如果我理解正确的话,这是 JTable 的默认行为。

但是,这对我来说似乎无法正常工作。在用户单击单元格之前,只会显示 JLabel。
JSpinner(即 CellEditor)仅在用户双击单元格时显示。因此,看起来单元格仅在 MouseEvents 上进入“编辑”模式,而不是在它具有焦点时。

如何让单元格在获得焦点后立即进入编辑模式?

最佳答案

谢谢 n00213f。您帖子中的主题和示例很有帮助。通过在线程中重载 JTable 中的 changeSelection 方法,JTable 会在每次更改选择时检查单元格是否可编辑。如果单元格是可编辑的,它将显示 CellEditor 并将焦点转移到编辑器组件。

为了完整起见,这是我的解决方案:

  JTable myTable = new javax.swing.JTable()
  {
            public void changeSelection(final int row, final int column, boolean toggle, boolean extend)
            {
                super.changeSelection(row, column, toggle, extend);
                myTable.editCellAt(row, column);
                myTable.transferFocus();
            }
  };

关于java - JTable - 按 Tab 键让单元格进入编辑模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3013165/

相关文章:

java - JLabel 图像数组

Java的foreach循环是如何工作的

java - 检索 jscrollpane 中包含的 jtable 的已更改内容

java - 如何使 JTable 在 Java 中可编辑

java - 如何根据单元格中输入的文本内容增加jtable中行的高度

java - AWS Lambda Java函数成功但超时

java - 自定义 ListView 和 Sherlock 列表 fragment

java - 我如何打印我的面板,从 (locationx,locationy) 到 (panel.getWidth(),panel.getHeight())?

java - 如何使用扩展类作为变量?

java - 在 Java 中绘制像素缓冲区的最快方法是什么