Swingのサンプル

簡単なフレーム

SimpleGUIApplication という抽象クラスが用意されており、SwingUtilities#invokeLater を勝手にやってくれます。以下は空のパネルがあるだけのフレームの例です。

import scala.swing._
object Main extends SimpleGUIApplication {
  val panel = new BorderPanel {
    preferredSize = (300, 200)
  }
  def top = new MainFrame {
    title = "Swing with scala"
    contents = panel
  }
}

イベント処理

以下はボタンのクリックをカウントする簡単なアプリケーション例です。

import scala.swing._
import scala.swing.event._
import javax.swing.UIManager

object Example101 extends SimpleGUIApplication {
  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())

  def top = new MainFrame {
    title = "Swing with scala";
    contents = new BorderPanel {
      import BorderPanel.Position._ 
      add(label, Center)
      add(button, South)
    }
  }
  
  val button = new Button("Click")
  object label extends Label("Count:-") {
    var count = 0;
    listenTo(button)
    reactions += {
      case ButtonClicked(button) =>
        count += 1
        text = "Count:" + count
    }
  }
}

label の定義中の listenTo にてbuttonのイベントをリスンするよう設定しています。
ボタンクリックの反応として、ButtonClicked というケースクラスにて処理を記述しています。