Swingを使う
とりあえずイベントを扱う練習。ボタンを押したらHelloと表示するサンプル。
関数を渡せる言語だと、actionPerformedメソッドの中身を渡してインスタンスが作れるので便利だ。
デバッグ用にインタプリタ内から実行するときは、閉じるボタンでインタプリタまで終了しないように
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
の所をコメントアウトする。
import javax.swing._ import java.awt._ import java.awt.event._ class Btn(t:String,f:ActionEvent=>Unit) extends JButton with ActionListener{ setText(t) override def actionPerformed(e:ActionEvent) = f(e) addActionListener(this) } object BtnTest extends Application{ val jf = new JFrame("BtnTest") val cp = jf.getContentPane cp.setLayout(new FlowLayout) cp.add(new Btn("OK",e=>JOptionPane.showMessageDialog(jf,"Hello"))) cp.add(new Btn("実行",e=>JOptionPane.showMessageDialog(jf,"こんちは"))) jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) jf.setSize(200,100) jf.setVisible(true) }
fsc
fscというコマンドを使うとコンパイラをデーモンとして起動するので、コンパイラの起動時間が省けるらしい。
以下の2つのやり方はどっちが速いんだろう。
体感的には:lの方が速い気がするんだけど、単に途中経過が見えてるからなのかな。
> fsc BtnTest.scala > scala BtnTest
scala> :l BtnTest.scala scala> BtnTest.main(null)
その他気がついた点。
fsc(というかscalac)を使う方はソースコードをデフォルトでUTF-8として解釈
:loadを使う方は、ソースコードをShift_JISとして解釈(DOS窓の影響?)
BtnTest.main(null)で実行するとたまにこけることがある。そのときは:loadからやり直すと実行出来る。
fscを使う方は.classファイルが作られるが、:loadの方は作られない。