2010-05-25 67 views
0

在我的域中,我有不斷由單獨進程更新的對象,並且我希望PropertySheetView顯示更改的屬性。當前的實現被設置爲使得底層域模型對象是不可變的,並且因此當它改變時,存在具有相應ID發佈的新對象。此時,包裝對象的節點已訂閱,獲取帶有匹配ID的更新對象,並重新創建表(通過createSheet())並用更新後的信息調用setSheet。這樣可以很好地顯示域模型對象的最新版本。NetBeans平臺 - 當屬性開始/結束編輯時如何獲得回調

但是,某些屬性不是隻讀的,而是可以設置的。我想鎖定工作表的更新/覆蓋,無論是在行或表的基礎上,而一個屬性正在編輯。爲了做到這一點,我需要監聽編輯的開始和結束呼叫,以便我能夠知道何時可以再次更新表單。

這對我的應用至關重要;因爲現在您無法在工作表刷新之前輸入新的值,並且編輯也會消失。

如果重要,我使用自定義的PropertyEditorSupport,但使用默認的InplaceEditor。

我已經通過NetBeans源進行了大量搜索,並且沒有看到任何暴露的API設置來監聽這些東西。

SheetCellEditor(org.openide.explorer.propertysheet)暴露了一個addCellEditorListener方法,但A)我想不通我怎麼會得上SheetCellEditor實例的句柄,B)由SheetCellEditor公開的方法editingCanceled和editStopped - 開始編輯沒有回調!看起來非常愚蠢。 SheetTable和BaseTable也會公開這個屬性,因爲它們擴展了JTable,但我無法弄清楚如何獲得它們的句柄。

我注意到CellEditor接口需要方法isCellEditable(),如果可以編輯單元格,並且編輯開始,則該方法應該返回true。但是,再次,這是由不是公共類的SheetCellEditor實現的,我不知道如何獲取它的引用。

謝謝你的幫助。

回答

0

我可以拿出最好的解決辦法如下:

創建一個自定義屬性編輯器。使該編輯器實現InplaceEditor。返回一個文本字段的StringInplaceEditor。將焦點偵聽器附加到該文本字段。焦點位於文本字段中時,正在編輯它。否則它不是。

相關問題