0

在我的域中,我的对象不断被一个单独的进程更新,我想要一个 PropertySheetView 来显示不断变化的属性。当前实现的设置使得底层域模型对象是不可变的,因此当它发生变化时,会发布一个带有相应 ID 的新对象。此时,包装对象的节点已订阅,获取具有匹配 ID 的更新对象,并重新创建工作表(通过 createSheet())并使用更新信息调用 setSheet。这在始终显示域模型对象的最新版本时效果很好。

但是,有些属性不是只读的,而是可以设置的。我想在编辑属性时以行或工作表为基础锁定工作表不被更新/覆盖。为了做到这一点,我需要监听编辑开始和结束调用,这样我就可以知道何时可以安全地再次更新工作表。

这对我的申请至关重要;就目前而言,您无法在刷新工作表并且您的编辑消失之前输入新值。

如果重要,我使用的是自定义 PropertyEditorSupport,但默认使用 InplaceEditor。

我在 NetBeans 源代码中进行了大量搜索,但没有看到任何公开的 API 设置来监听这些内容。

SheetCellEditor (org.openide.explorer.propertysheet) 公开了一个 addCellEditorListener 方法,但是 A) 我不知道如何获得 SheetCellEditor 实例的句柄,并且 B) SheetCellEditor 公开的方法是 editingCanceled 和 editingStopped - 有没有回调开始编辑!看起来很傻。SheetTable 和 BaseTable 也会公开此属性,因为它们扩展了 JTable,但我也不知道如何获取它们的句柄。

我注意到CellEditor接口需要方法isCellEditable (),如果可以编辑单元格,该方法应该返回 true,从而开始编辑。但同样,这是由不是公共类的 SheetCellEditor 实现的,我不知道如何获得对它的引用。

感谢您的帮助。

4

1 回答 1

0

我能想出的最佳解决方案如下:

创建自定义属性编辑器。使该编辑器实现 InplaceEditor。返回一个 StringInplaceEditor,它是一个文本字段。将焦点侦听器附加到该文本字段。当焦点在文本字段中时,它正在被编辑。否则不是。

于 2010-05-28T21:21:31.813 回答