2012-11-22 70 views
1

我想知道是否可以確定在Eclipse中編輯器中輸入的內容是什麼 - 我目前正在使用示例JDT編輯器 - 然後根據該輸入執行操作。Eclipse:編輯器接收輸入時執行任何操作

例如:我在我的編輯器窗口中打開了一個文件example.jav。我推「a」鍵。 'a'將出現在編輯器窗口中,但'a'也會打印到控制檯。

很明顯,我將要執行的操作將比System.out.println()語句更復雜,但如果有人能夠幫助告訴我編輯器本身檢測到更改的位置,我可以從那裏。

的幾個注意事項:

  • 我在Eclipse 3.7.2從事Java 1.7
  • 如果你不能找到JDT例如編輯器,進入幫助>歡迎>樣品並點擊「的Java編輯」。

在此先感謝!

+0

相反,是否可以將「KeyListener」添加到編輯器中? – thanatavius

回答

0

想通了!由於編輯器API在eclipse中非常龐大,很難知道從哪裏開始,因此我專注於將KeyListener添加到Shell。結果發現在SWT中存在一些問題,因爲當殼牌項目獲得重點關注時,殼牌本身重點關注。經過一番搜索,我偶然發現了someone else who had the same problem。通過在Shell的顯示中添加一個過濾器,您可以添加一個適用於整個應用程序的Listener對象。如:

IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); 
Shell shell = window.getShell(); 
shell.getDisplay().addFilter(SWT.KeyDown, new Listener() 
       { 
        public void handleEvent(Event event) 
        { 
         System.out.println("" + event.character); 
        } 
       }); 

爲了推動這一點,只擔心在特定的非小部件的部分(否則你可以只添加一個KeyListener的該部分),您可以添加一個檢查,以確保當前活動的按鍵部分與您希望通過使用簡單的檢查來執行操作的任何部分相同。

final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); 
Shell shell = window.getShell(); 
shell.getDisplay().addFilter(SWT.KeyDown, new Listener() 
       { 
        public void handleEvent(Event event) 
        { 
         IWorkbenchPage page = window.getActivePage(); 
         IWorkbenchPart part = page.getActivePart(); 
         IEditorPart editor = page.getActiveEditor(); 
         if(part.equals(editor)) 
         { 
          System.out.println("" + event.character); 
         } 
        } 
       }); 

這是希望這可以幫助別人比我找到解決方案更容易的時間!