S-JIS[2011-04-03] 変更履歴

Scala MenuBar(Swing)

ScalaSwingのメニューバーのメモ。


サンプル

以下のようなメニューを表示するサンプル。

ファイル(F) 編集(E)
import scala.swing.Action
import scala.swing.Label
import scala.swing.MainFrame
import scala.swing.{ MenuBar, Menu, MenuItem }
import scala.swing.SimpleSwingApplication
import scala.swing.event.Key
object MenuSample extends SimpleSwingApplication {
  override def top = new MainFrame { frame =>
    title = "メニューサンプル"

    menuBar = new MenuBar {
      contents += new Menu("ファイル(F)") {
        mnemonic = Key.F

        contents += new MenuItem(Action("新規ウィンドウ(N)") {
          println("新規ウィンドウ")
        }) {
          mnemonic = Key.N
        }
        contents += new MenuItem(Action("終了(X)") {
          frame.dispose()
        }) {
          mnemonic = Key.X
        }
      }

      contents += new Menu("編集(E)") {
        mnemonic = Key.E

        contents += new MenuItem(Action("コピー(C)") {
          println("コピー")
        }) {
          mnemonic = Key.C
        }
        contents += new MenuItem(Action("貼り付け(P)") {
          println("ペースト")
        }) {
          mnemonic = Key.P
        }
      }
    }

    contents = new Label("メニューの実験です")
  }
}

ニーモニック

MenuおよびMenuItemでメニュー名(テキスト)を指定しただけでは、キー部分に下線は引かれない。
下線を引くにはニーモニック(mnemonic)を指定する必要がある。

コーディング例 備考
new Menu("ファイル(F)") {
  mnemonic = Key.F
}
mnemonicで指定する方法。
Keyは列挙型
new Menu("ファイル(F)") {
  displayedMnemonicIndex = "ファイル(F)".lastIndexOf('F')
}
new Menu("ファイル(F)") {
  displayedMnemonicIndex = text.lastIndexOf('F')
}
displayedMnemonicIndexでテキスト内の位置(文字のインデックス)を指定する方法。
textメソッドは、Menu(やMenuItem)のコンストラクターで指定した文字列を取得する。
ただしこの指定のみだと下線を表示するだけで、実際にキーを押しても反応しない。
new MenuItem(new Action("コピー(C)") {
  mnemonic = Key.C.id

  override def apply() {
    println("コピー")
  }
})
Actionの中で指定する方法。
Action内のmnemonicはKeyでなくInt(KeyEventのVK_〜)を指定する。
KeyのidはKeyEventのVK_〜そのもの。

Scala Swingへ戻る / Scala目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま