エディタは、ユーザーが変更するオブジェクトを表示するビューです。
エディタ・クラスはEditorインタフェースを実装します。AbstractEditorを拡張することによって実装する場合もあります。エディタ・クラスは、そのエディタに対して登録されているタイプのノードを開いて表示するたびに、インスタンス化されます。
エディタは、次のその他のコンポーネントに関連付けられています。
エディタ・クラスには次の機能が必要です。
ここに示したコード例は、PropFileサンプル・プロジェクトのものです。この例と他の拡張機能の例は、Oracle Technology Network(OTN)のWebサイト(http://otn.oracle.com/products/jdev/htdocs/partners/addins/exchange/docsamples/content.html)で入手できます。
エディタ・マネージャは、ユーザーがナビゲータ内でノードを開くと、エディタ・クラスをインスタンス化します。エディタ・マネージャは、デフォルトのコンストラクタをコールするため、コンテキスト特有のパラメータは使用できません。
public PropFileEditor() { systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); }
エディタ・マネージャは、setContextメソッドをコールすることにより、エディタ・インスタンスを初期化します。このメソッドは、編集するドキュメントをコンテキストから抽出し、エディタ・コンポーネントを初期化します。
public synchronized void setContext( Context context ) { if ( context != null ) { Element element = context.getElement(); // A sanity check: if the context is bad the editor pane will be empty. if ( ( element != null ) && ( element instanceof TextDocument ) ) { super.setContext( context ); document = (TextDocument) context.getElement(); initializeGraphics( context ); initializeTimer(); } } }
エディタには、ユーザー・イベントを捕捉し解析するコントローラ・インスタンスが関連付けられています。IDEは、コントローラを取得するためにエディタのgetControllerメソッドをコールします。メソッドは最初にコールされた際にコントローラを作成します。
public Controller getController() { if ( editorController == null ) { editorController = new PropFileEditorController( this ); } return editorController; }
データ・オブジェクトのエクスプローラ・ビューは、エディタ内のドキュメントにおける移動手段を提供します。ユーザーがエクスプローラで要素を選択すると、エクスプローラはエディタに対し、対応するデータの部分を表示するように指示します。
エディタをエクスプローラと統合する場合、エディタは1つ以上のgotoメソッドを提供する必要があります。(この機能はEditorインタフェースでは不要です。)次の例は、エディタのカーソルをテキスト・ファイルの指定した行に移動させるメソッドです。
public void setCaretPosition( int offset ) { editorComponent.setCaretPosition( offset ); }
エディタ・コンポーネントは、JEditorPaneの実装として、データが変わるとアクション・イベントを生成します。エディタは、KeyListenerなどのインタフェースを実装し、初期化時にエディタ・コンポーネントのaddKeyListenerメソッドをコールして、イベントを受信するために自身を登録します。次のKeyListenerメソッドの例では、keyTypedが、レコグナイザなど、その他のIDEオブジェクトに変更を警告するメソッドを起動します。
public void keyTyped( KeyEvent e ) { timer.restart(); }
データ・オブジェクトの状態が変わる際、ドキュメントのエクスプローラなど、その他のIDEコンポーネントに通知する必要があります。これは通知メカニズムを介して行われます。エディタはUpdateMessageインスタンスを作成し、これをドキュメントのオブザーバに一斉送信します。
public void keyTyped( KeyEvent e ) { timer.restart(); }
エディタの開発
EditorAddinインタフェースの実装
コントローラの実装
JDeveloperにおけるデータ・オブジェクトについて
通知について
oracle.ide.Addin.Controller
oracle.ide.addin.UpdateMessage
oracle.ide.editor.Editor
oracle.ide.editor.AbstractEditor
oracle.ide.editor.EditorAddin
oracle.ide.explorer.Explorer
oracle.ide.model.Document
java.awt.event.KeyListener
javax.swing.JEditorPane