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系ならコンパイル出来る。
NetBeansScalaは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
  }
}

OK.コンパイル出来ました*1

追記

山中さんより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
  }
}

こうか。うーん読解力が低いな

*1:java.awt.Dimensionはどこでimportされてるんだろ?2.7だとComponent.scalaだったみたいだけど。