Scala から Java で作った自作フレームを呼んでみた

2009 年 2 月 22 日 | カテゴリー: プログラム

2009022204.png

前回、素直にチュートリアル通り Hello World をやってみたわけですが。トレースのおまけつきで。
Apribase » Scala で Hello World が出力されるまでをトレースしてみた

今回も素直にチュートリアル通り Java ライブラリを扱ってみました。フレーム表示と自作クラスファイルの読み込み確認のおまけつきで。

block must end in result expression, not in definition

2009022205.png

素直にチュートリアルをやって Java ライブラリを呼べることを確認。
ふと println をコメントアウトしたら NetBeans におこられました。
コンパイルもしっかりとエラー。

block must end in result expression, not in definition

へー。ちょっとときめきました。

/*
 * FrenchDate.scala
 * kei <http://apribase.net>
 * Created on 2009/02/22
 */

package net.apribase.index002

import java.util.{Date, Locale}
import java.text.DateFormat;
import java.text.DateFormat._

object FrenchDate {

    /**
     * @param args the command line arguments
     */
    def main(args: Array[String]) {
        var now = new Date
        val df = getDateInstance(LONG, Locale.FRANCE)
        println(df format now)
    }

}

JFrame を呼んでみる

2009022206.png

DateFormat とかがいけるならと、JFrame を呼んでみる。
NetBeans Scala プラグインだと、「インポートの編成」ができないのが致命的かも?
# いい方法があれば教えていただけると喜びます。

メソッドを呼ぶときはスペースで空けるのが Smalltalk や ruby っぽい。
でも NetBeans Scala プラグインだと、スペースを打ったあとオブジェクトが可能な振る舞いを教えてくれないんですが;
ドットだと補完が入るので、どちらでもいいなら現状はドットを使っちゃいそう。
# これもいい方法があれば同文。

/*
 * HelloJFrame.scala
 * kei <http://apribase.net>
 * Created on 2009/02/22
 */

package net.apribase.index002

import javax.swing.JFrame

object HelloJFrame {

    /**
     * @param args the command line arguments
     */
    def main(args: Array[String]) {
        var frame = new JFrame
        frame setSize(400, 300)
        frame setVisible(true)
    }

}

自作フレームを呼んでみる

2009022207.png

Scala プロジェクト上でも Java クラスの作成ができるみたいです。
NetBeans の Matisse と連携できたら夢のよう。
OriginalFrame.java というのを作ってみました。
# Matisse でサクサク作ったのでソースコードはなしで。

2009022208.png

調子にのって Nimbus Look and Feel も適用してみました。
引数に String とか怖すぎるし、Java で書くなら try-catch で囲めって NetBeans はおこるしコンパイルもエラーになるしのはずなんですが、何もおこられません。

でも new OriginalFrame は NetBeans 上でおこられました。そんなクラスは知らんよって。
もちろん同一パッケージ上に置いてますよ。

2009022209.png

Scala と Java、どちらもクラスファイルにコンパイルされる先は同じです。
ちゃんと同一パッケージに配置されてます。
そんなわけでおこられてるのにコンパイルは通ります。

2009022210.png

うごいたー。

/*
 * HelloOriginalFrame.scala
 * kei 
 * Created on 2009/02/22
 */

package net.apribase.index002

import javax.swing.UIManager

object HelloOriginalFrame {

    /**
     * @param args the command line arguments
     */
    def main(args: Array[String]) {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        new OriginalFrame().setVisible(true)
    }

}

確認できたこと

NetBeans Scala プラグインだと、さすがにまだ Java ほどサクサク補完等のサポートがあるわけじゃなさそう。
でも自分の定義したクラスからもオブジェクトを生成できるので、Java と Scala は一緒に書けるわけだからやりやすいほうで書けるということ。多言語プログラミング楽しくなってきた…!
とりあえずロジックを Scala で書きつつ Swing や ICEFaces を Java で描くとか試してみよう。

コメントはまだありません。