Scala から Java で作った自作フレームを呼んでみた
前回、素直にチュートリアル通り Hello World をやってみたわけですが。トレースのおまけつきで。
Apribase » Scala で Hello World が出力されるまでをトレースしてみた
今回も素直にチュートリアル通り Java ライブラリを扱ってみました。フレーム表示と自作クラスファイルの読み込み確認のおまけつきで。
block must end in result expression, not in definition
素直にチュートリアルをやって 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 を呼んでみる
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)
}
}
自作フレームを呼んでみる
Scala プロジェクト上でも Java クラスの作成ができるみたいです。
NetBeans の Matisse と連携できたら夢のよう。
OriginalFrame.java というのを作ってみました。
# Matisse でサクサク作ったのでソースコードはなしで。
調子にのって Nimbus Look and Feel も適用してみました。
引数に String とか怖すぎるし、Java で書くなら try-catch で囲めって NetBeans はおこるしコンパイルもエラーになるしのはずなんですが、何もおこられません。
でも new OriginalFrame は NetBeans 上でおこられました。そんなクラスは知らんよって。
もちろん同一パッケージ上に置いてますよ。
Scala と Java、どちらもクラスファイルにコンパイルされる先は同じです。
ちゃんと同一パッケージに配置されてます。
そんなわけでおこられてるのにコンパイルは通ります。
うごいたー。
/*
* 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 で描くとか試してみよう。








