Iokeでウィンドウ表示

IokeJavaのAWTのウィンドウを表示してみる。

自分で閉じない版

window1.ik:

win = java:awt:Frame new("Test")
win add("Center", java:awt:Label new("ラベル", java:awt:Label field:CENTER))
win pack
win show

結果:

クローズボックスを押しても閉じないので、Iokeを起動したコンソールからCtrl-Cなどで停止する。

コードの説明:

Javaのクラスを参照するには「java:awt:Frame」のように書く。

Javaのオブジェクトのフィールドにアクセスするには「field:フィールド名」のように書く。文字列を中央に表示するため、Label.CENTERというフィールド(クラス変数)の値を指定しているので「Label field:CENTER」としている。

ちなみにソースをUTF-8で書いておけば日本語も通る。嗚呼、素晴らしき哉Java環境。

自分で閉じる版

さらに、ウィンドウ上にボタンを配置して、クリックするとウィンドウが閉じるようにする。

window2.ik:

win = java:awt:Frame new("Test")
win add("Center", java:awt:Label new("ラベル", java:awt:Label field:CENTER))
button = java:awt:Button new("閉じる")
button addActionListener(fn(e, win dispose))
win add("South", button)
win pack
win show

結果:

コードの説明:

ボタンに対してActionListenerを設定している。本来ならばJavaのActionListenerインターフェイスを実装しているオブジェクトを持ってくる必要があるけど、単なる“fn”(ブロック)で済んでいる。

公式ガイド によると、「単一メソッドで他にオーバーロードしようがないものは、インターフェイスや抽象クラスとして使っちゃう」ということらしい。

複数メソッドをもつインターフェイスのときは、この方法は使えないということかな?