倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

GroovyConsole 内蔵エディタ

以前に GroovyConsole で使われているアイコンを使う方法を見ましたが、今回は GroovyConsole で使われているエディタを使う方法を見ていきます。

とりあえず関連のありそうなクラスは以下の2つです:

まぁ細かい設定などをしたい場合は同パッケージ内のクラスを扱う必要も出てくるかも知れませんが、大抵の設定はこの2つのクラスのプロパティ設定で何とかなると思います。 とか言いつつ、この記事では TextEditor もほぼ扱いませんが。

ConsoleTextEditor クラス


GroovyConsole で使われているエディタは groovy.ui.ConsoleTextEditor です。 このクラスは javax.swing.JScrollPane クラスを継承しています。 つまり、このクラス自体はテキストを扱うわけではありません。 テキストを扱っているのは groovy.ui.text.TextEditor クラスで、このインスタンスは ConsoleTextEditor#getTextEditor() メソッドによって取得できます。 サンプルを見る前に、少しこのクラスについて簡単に見ていきましょう:

  • TextEditor クラス
  • ConsoleTextEditor のプロパティ
  • デフォルトで定義されているアクション

TextEditor クラス

groovy.ui.text.TextEditor クラスは javax.swing.JTextPane クラスを拡張しています。 テキストエディタに細かい設定を行いたい場合はこのクラスのインスタンスをイジるといいと思います。 API ドキュメントはこちら

ConsoleTextEditor のプロパティ

ConsoleTextEditor から直接設定できるプロパティには以下のようなものがあります:

プロパティ アクセッサ デフォルト値 説明
defaultFamily String get/set "Monospaced" デフォルトのフォント・ファミリー
showLineNumbers boolean set true 行番号を表示するかどうか
editable boolean set true 編集可能かどうか

デフォルトで定義されているアクション

ConsoleTextEditor には以下のアクションがデフォルトで定義されています:

  • undoAction ・・・ 編集を取消す
  • redoAction ・・・ 取り消した編集を再実行する
  • printAction ・・・ プリントするらしい(試してない)

これらはどれも javax.swing.Action クラスのサブクラスで、ConsoleTextEditor のインスタンスから getUndoAction() のような getter メソッドによって取得できます。 setter メソッドは定義されていません。

ConsoleTextEditor の使い方


では、ConsoleTextEditor を使ったサンプルを見ていきましょう。 といっても、普通の JComponent として扱えばいいだけです:

import java.awt.BorderLayout as BL
import javax.swing.WindowConstants as WC
import groovy.swing.SwingBuilder
import groovy.ui.ConsoleTextEditor

// ConsoleTextEditor インスタンス生成
def editor = new ConsoleTextEditor()

// エディタの初期テキストの設定
editor.textEditor.text = '''// "PROGRAMMING GROOVY FROM NOTICE TO PROFESSIONAL"
def obj = new Expando()

obj.name = 'Duke'
obj.greet = { to -> println "Hi, $to. I'm $name!" }

obj.greet('Steve')
'''
// 初期テキスト、ここまで

def frame = new SwingBuilder().frame(
        title:'Groovy Console Editor',
        pack:true,
        defaultCloseOperation:WC.EXIT_ON_CLOSE){

    borderLayout()
    toolBar(constraints:BL.NORTH){
        // Redo ボタン ・・・ actionPerformed で動作を設定
        button icon:imageIcon(resource:png('arrow_redo')), actionPerformed:{ event ->
            editor.undoAction.actionPerformed(event)
        }

        // Undo ボタン ・・・ action で動作を設定
        button action:editor.redoAction, icon:imageIcon(resource:png('arrow_undo'))

        // Print ボタン ・・・ action で動作設定
        button action:editor.printAction, text:'Print'
    }

    widget(editor)    // ConsoleTextEditor オブジェクトをフレームに追加
}
frame.visible = true

def png(String name){
    return "/groovy/ui/icons/${name}.png"
}

widget ノードによって ConsoleTextEditor をフレームに追加しています。 このコードを実行すると、以下のようなエディタが表示されます:


キーワードなどがハイライトされて表示されます! Redo, Undo 処理もキチンと行えます! イエィ! Print 処理は試してませんケド。 ちなみに、エディタに表示されてるコードは『プログラミングGROOVY』から拝借しました m(_ _)m
プログラミングGROOVY

プログラミングGROOVY