ScalaでSwing メニュー

  • MenuBar
    • Menu
      • MenuItem
        • Action (abstract class)
        • Action (object)
      • CheckMenuItem
      • ButtonGroup
        • RadioMenuItem
      • Menu
      • Separator

import

import scala.swing._
import scala.swing.event.WindowClosing
import java.awt.event.{ KeyEvent, InputEvent }
import javax.swing.{ KeyStroke, ImageIcon }

Menu

val menuFile = new Menu("メニュー(M)")
//TODO menuFile.mnemonic = Key.M

MenuItem

val menuOpen = new MenuItem(new Action("開く(O)") {
  mnemonic = KeyEvent.VK_O
  accelerator = Some(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK))
  icon = new ImageIcon("build/icon.png")
  toolTip = "ファイルを開く"
  def apply() {}
})

val menuSave = new MenuItem(new Action("保存(S)") {
  mnemonic = KeyEvent.VK_S
  accelerator = Some(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK))
  enabled = false
  def apply() {}
})

val menuExit = new MenuItem(new Action("終了(X)") {
  mnemonic = KeyEvent.VK_X
  def apply() {
    top.publish(new WindowClosing(top))
  }
})

CheckMenuItem

val menuLine = new CheckMenuItem("行番号を表示")

ButtonGroup, RadioMenuItem

val menuLang = new Menu("言語(L)")
val menuLangScala = new RadioMenuItem("Scala")
val menuLangRuby = new RadioMenuItem("Ruby")
val mutexLang = new ButtonGroup(menuLangScala, menuLangRuby)
menuLang.contents ++= mutexLang.buttons
menuFile.contents += menuOpen
menuFile.contents += menuSave
menuFile.contents += menuLine
menuFile.contents += menuLang
menuFile.contents += new Separator
menuFile.contents += menuExit

menuBar = new MenuBar {
  contents += menuFile
}

gist: 217465 - ScalaでSwing メニュー