まとめると
自分で書いててもごちゃごちゃしてきたので、ここらでまとめときます
- 次のインターフェースを実装するクラスをそれぞれ用意する
- EditorPluginの実装クラスには、次のインターフェースも実装させる
- javax.swing.event.CaretListener
これを実装して、BasicEditorPane(JDeveloperのコード・エディタ・クラス)に add すれば、コード・エディタ上で選択領域が変更されたイベントを受け取ることができる。これを利用して、選択領域の最初と最後のカーソル位置を拾って、矩形選択領域を計算する。 - oracle.javatools.editor.ActionHookInvoker
これを実装して、BasicEditorPaneに add すれば、コード・エディタ上のアクションを引っ掛けて別処理を行わせることができる。これを使って、矩形選択状態のときのコピー、ペーストなどでの別処理を実施する。 - java.awt.event.KeyListener
これを実装して、BasicEditorPaneに add し、矩形選択状態の場合のキー入力処理イベントを拾う。矩形選択状態のときにキー入力された場合は、入力キーを挿入する前に、矩形領域を削除する必要があるため。 - java.awt.event.MouseListener
これを実装して、BasicEditorPaneに add し、矩形選択状態の場合に別の位置でマウスクリックされたときに、既存の矩形選択領域を解除する処理を行う。
- javax.swing.event.CaretListener
- 実際の矩形選択に関するアクションを処理するクラスを用意する
このクラスでは、次のような処理を用意する- 最初と最後のカーソル位置から、矩形選択領域を計算
=> 矩形領域をハイライトする。BasicEditorPaneのハイライト層は、BasicEditorPane#createHighlightLayer で取得可能 - 矩形選択領域を削除する処理
- 矩形選択領域に対するアクション(カット、コピー、ペースト)
- 最初と最後のカーソル位置から、矩形選択領域を計算
これらがすべて実装できれば、残りはわずかな気がします。