为什么DefaultCellEditor有两种不同的编辑模式?

时间:2014-05-29 00:43:53

标签: java swing jtable tablecelleditor

在JTable中使用DefaultCellEditor时,似乎有两种不同的编辑模式:

  • 单击一个单元格不会显示编辑器组件,但是(对于String / Object类),仍然可以键入所选单元格,从而编辑其值。

  • 双击单元格会显示编辑器组件,可以按预期编辑所选单元格的值。

这是为什么?有人会认为编辑JTable单元格的值总是涉及相同的UI行为。

1 个答案:

答案 0 :(得分:1)

从技术上讲,双击一个单元格并输入一个单元格(支持文本编辑)基本上归结为同样的事情。您实际上可以双击文本可编辑单元格以开始编辑过程

单元格可编辑性归结为两个因素,即TableModel#isCellEditableTableCellEditor#isCellEditable的结果,当这两个方法返回true时,单元格可以置于编辑模式。

文本可编辑单元格通常是一种特殊情况,可以通过在单元格中进行焦点和双击(并在大多数情况下按 F2 )键入单元格来编辑单元格。 / p>

提供多种机制来初始化编辑过程的情况将归结为跨多个平台的可用性和现有约定的决策。可能有人试图在可能的情况下混合期望,因此不同平台的用户可以对这个过程感觉更舒服,但这只是猜测。

问题是,即使在单个平台的用户中,对于这样的工作方式有不同的期望,因此提供单个触发器,系统设计为允许多个触发器,它适用于哪里

例如,对于包含图像的单元格而言,只允许用户通过键入来编辑单元格是没有意义的。

<强>更新

如果你看一下isCellEdtiable的{​​{1}}方法......

DefaultCellEditor

您会注意到,实际停止某个单元格进入编辑模式的唯一事件是public boolean isCellEditable(EventObject anEvent) { if (anEvent instanceof MouseEvent) { return ((MouseEvent)anEvent).getClickCount() >= clickCountToStart; } return true; } ,但仅当鼠标点击次数小于MouseEvent时才设置为{clickCountToStart 1}}使用2作为编辑器,否则它JTextField