这是这些早期问题的后续内容:


How to stop editing with DefaultCellEditor when a separate JBtton is pressed
Sun Bug 4724980: JTable: Add API to control what happens to edits when table loses focus.


当我使用terminateEditOnFocusLost属性时,如下所示,当表格失去焦点时,CellEditor会正确停止编辑:

jtable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);


它也可以与我的JButtons一起使用。在处理按钮按下动作之前,为TableCellEditor调用了stopCellEditing()方法。但是,当我将其与JTree一起使用时,并且树的选择发生了变化,在TreeSelectionListener.valueChanged之前调用stopCellEditing()方法。

有谁知道是否有一种方法可以强制首先调用stopCellEditing(),或者我是否应该为此问题做出一些解决方法?

最佳答案

JTreeSwing中没有相似的客户端属性。
但是JXTreeJTreeSwingX的派生类,它是:invokeStopEditing

如果您不能使用SwingX,则始终可以查看JXTree的源代码,并查看此StopEditing机制的工作原理:JXTree SwingX 1.0 API Documentation and Javadoc (go to Source tab)

特别地,从974行开始,创建一个侦听器以监视permanentFocusOwner等上的“ KeyboardFocusManager”属性更改。

10-05 22:19