2015-12-28 45 views
0

我創建了多頁HTML編輯器,其中一個選項卡具有文本編輯器。我在源代碼編輯器中將全局動作處理程序設置爲撤銷/重做動作的操作欄。無論什麼時候我在源代碼編輯器中添加一些東西然後撤消它,在第一次嘗試時它不會返回相同的代碼。它正在完成第二次嘗試。任何人都可以幫助我解決這個問題。eclipse插件中的文本編輯器沒有正確執行

在主編輯器中重寫setFocus()方法,並在此方法中調用源編輯器的以下方法。

public void setUndoRedoActionHandlers() { 

    final IActionBars actionBars = getEditorSite().getActionBars(); 
    actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(), 
      mUndoAction); 
    actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(), 
      mRedoAction); 
    actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), 
      mDeleteAction); 
    actionBars.setGlobalActionHandler(
      ITextEditorActionConstants.DELETE_LINE, mDeleteLineAction); 

    actionBars.updateActionBars(); 
} 

感謝

+0

這怎麼能解決,甚至沒有看看代碼? –

+0

檢查上面的源代碼。 –

+0

如果我沒有記錯,你應該使用'MultiPageEditorActionBarContributor'作爲編輯器動作欄貢獻者類。 –

回答

0

你確定你通過覆蓋的setFocus設置的全球行動()?看看這個:https://wiki.eclipse.org/FAQ_How_do_I_enable_global_actions_such_as_Cut,_Paste,_and_Print_in_my_editor%3F 報告說,他們需要方法setActiveEditor()

我猜你爲什麼看到它的工作第二時間的原因是內部設定 - 當你第一次點擊你的編輯器獲得焦點和的setFocus被稱爲然後纔會設置全局操作。那麼第二次它會起作用,因爲現在已經設定了動作。

+0

感謝您的答案,其實我得到的問題。這是因爲刪除操作在源代碼編輯器中已經處於活動狀態,所以當我從設計器執行單一刪除操作時,刪除操作會在源代碼編輯器中發生,而刪除操作會在設計器端發生,這又會改變源代碼碼。所以一次點擊就發生了兩個變化。因此,撤消最後的源代碼會被更新,但源代碼上的第一次刪除不會更新,因此也是問題。 –

+0

我在表單編輯器中添加了editorpart和文本編輯器。我想在編輯器上的編輯器部分和源編輯器上添加刪除功能,這兩者在行爲上會有所不同。你能告訴我如何實現這個功能? –

+0

@ishan我無法正確地記得正確地做什麼來達到你所要求的。請看[Eclipse編輯器FAQ](https://wiki.eclipse.org/FAQ_How_do_I_get_started_with_creating_a_custom_text_editor%3F)我想你需要重寫setAction(DELETE) – SomeDude