S-JIS[2011-04-03] 変更履歴
以下のようなメニューを表示するサンプル。
ファイル(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_〜そのもの。 |