2012-03-02 120 views
1

我有一個自定義TreeModel和顯示(現在)自定義TreeCellEditor一個JComboBox通過getTreeCellEditorComponent()覆蓋一個JTree。樹顯示正確,節點進入編輯模式並在點擊它們時顯示JComboBox保存價值

每當我編輯的一個節點,從下拉菜單中更改值,然後進行選擇三個另一個節點,我可以看到被觸發TreeCellEditorcancelCellEditing()

什麼是「正確」的方式停止編輯,而不是取消它,因此(希望?)確保模型的valueForPathChanged()得到觸發?

+2

沒有人知道你的AbstractTreeModel是如何工作的,如果正確地通知了所有事件,但在90pct中是'JTrees'事件對JTables事件非常相似(方法的不同名稱),搜索'start/stop/cancelEdit '用於'TableCellEditor' – mKorbel 2012-03-02 11:40:53

+0

對不起,這裏有很多新術語讓我有點困惑。我忘了'AbstractTreeModel'只是我自己實現的一個'TreeModel'類加上一些其他(無關)的東西。我更新了這個問題。 我找到了一個解決方案,但謝謝你的時間! :) – rogerkk 2012-03-02 12:29:13

回答

2

後在源代碼中進一步調查,我發現JTree類裏面的答案:

設置JTree#setInvokesStopCellEditing(true)意味着停止編輯在取消代替每當我改變焦點從一個節點到另一個節點。這也意味着我的TreeModel#valueForPathChanged()被調用。