1

Eclipseのエディター内に入力されたばかりの入力を判別して(現在、サンプルのJDTエディターで作業しています)、その入力に基づいてアクションを実行できるかどうか疑問に思っています。

例:エディタウィンドウでexample.javファイルを開いています。'a'キーを押します。「a」は通常どおりエディタウィンドウに表示されますが、「a」はコンソールにも出力されます。

明らかに、実行する操作はSystem.out.println()ステートメントよりも複雑になりますが、エディター自体が変更を検出する場所を誰かに教えてもらえれば、そこから取得できます。

いくつかの注意:

  • 私はJava1.7を使用してEclipse3.7.2で作業しています
  • JDTサンプルエディタが見つからない場合は、[ヘルプ]>[ようこそ]>[サンプル]に移動し、[Javaエディタ]をクリックします。

前もって感謝します!

4

1 に答える 1

0

理解した!

Editor APIは日食で非常に広大で、どこから始めればよいかわからないため、シェルにKeyListenerを追加することに重点を置きました。シェル内のアイテムがフォーカスを取得すると、シェル自体がフォーカスを失うため、SWTでは少し問題があることがわかります。しかし、少し検索した後、同じ問題を抱えている他の誰かに出くわしました。シェルの表示にフィルターを追加することで、アプリケーション全体で機能するリスナーオブジェクトを追加できます。そのような:

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を追加するだけでよい)ために、現在アクティブな部分が目的の部分と同じであることを確認するチェックを追加できます。単純なifチェックを使用してアクションを実行します。

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);
                        }
                    }
                });

これが私が解決策を見つけたよりも他の誰かがより簡単な時間を過ごすのに役立つことを願っています!

于 2012-11-23T04:32:23.710 に答える