Scala2.8でSwing
下に追記しました。
こちらのをちょっと写経したんですけど、NetBeans6.9環境で動かなかった。
以下のコードはコンパイル出来ない。
import scala.swing._ object Main extends SimpleGUIApplication { val panel = new BorderPanel { preferredSize = (300, 200) } def top = new MainFrame { title = "Swing with scala" contents = panel } }
ちなみに、上の書き方は2.7系ならコンパイル出来る。
NetBeansのScalaは2.8なんですけど、2.8だと駄目だと。
エラーはこんなの
error: type mismatch; found : (Int, Int) required: scala.swing.package.Dimension preferredSize = (300, 200) one error found
これはpreferredSize_の引数が、2.7ではDimensionいがいに(int,int)もあったけど、2.8ではない為。
引数はDimensionだけだよと。
あとあとついでに SimpleGUIApplicationはdeprecatedで、SimpleSwingApplication使えと。
import scala.swing._ object SimpleFrame extends SimpleSwingApplication { val panel = new BorderPanel{ preferredSize=(new Dimension(300,200)) } def top = new MainFrame { title= "Swing with scala" contents =panel } }
追記
山中さんよりimport scala.swing.Swing._ すればよいと教えてもらいました。
こちらをimportすることにより、(Int,Int) から Dimension への implicit conversion が適用されるようになりました!
import scala.swing._ import scala.swing.Swing._ object SimpleFrame extends SimpleSwingApplication { val panel = new BorderPanel{ preferredSize=(300,200) } def top = new MainFrame { title= "Swing with scala" contents =panel } }
Swing.scalaの該当箇所
implicit def pair2Dimension(p: (Int, Int)): Dimension = new Dimension(p._1, p._2)
おー、なるほど。構成結構かわってるんですね。
ありがとうございました。
あー
import scala.swing._ object SimpleFrame extends SimpleSwingApplication { val panel = new BorderPanel{ import Swing._ preferredSize=(300,200) } def top = new MainFrame { title= "Swing with scala" contents =panel } }
こうか。うーん読解力が低いな