S-JIS[2011-01-15] 変更履歴

Scala Dialog(Swing)

ScalaSwingのダイアログにはDialogクラスDialogオブジェクトがあり、DialogクラスはJavaのJDialog、DialogオブジェクトはJavaのJOptionPaneに相当する。
つまりDialogクラスは汎用的にダイアログを作成するのに使い、Dialogオブジェクトは単純なメッセージ表示・入力に使用する。


Dialogオブジェクトの例

showMessage

単純なメッセージを表示するダイアログ(MessageBox)の例。
REPLからでも実行できる)

scala> import scala.swing.Dialog
import scala.swing.Dialog

scala> Dialog.showMessage(title="title!", message="zzz")

showMessage()メソッドの引数は 親コンポーネント・メッセージ・タイトル・メッセージタイプ・アイコンだが、デフォルト引数が指定されているので、不要な引数は省略できる。
また、指定する引数が少ない場合は引数名を指定して値をセットするのが便利。(順序も自由に変えられるし)


showConfirmation

確認をするダイアログの例。

scala> import scala.swing.Dialog
import scala.swing.Dialog

scala> Dialog.showConfirmation(title="question", message="Yes or No ?")
res21: scala.swing.Dialog.Result.Value = Yes		←「はい」を押したとき

scala> Dialog.showConfirmation(title="question", message="Yes or No ?")
res22: scala.swing.Dialog.Result.Value = No		←「いいえ」を押したとき

scala> Dialog.showConfirmation(title="question", message="Yes or No ?")
res23: scala.swing.Dialog.Result.Value = Closed	←ダイアログを閉じたとき
scala> import scala.swing.Dialog.Result
import scala.swing.Dialog.Result

scala> Dialog.showConfirmation(message="Yes or No ?") match {
     |   case Result.Yes => "yes"
     |   case _          => "no"
     | }
res24: java.lang.String = yes

showInput

文字列を入力するダイアログの例。

scala> import scala.swing.Dialog
import scala.swing.Dialog

scala> Dialog.showInput(message="hoge", initial="zzz")
res31: Option[java.lang.String] = Some(abc)	←「abc」を入力した

scala> Dialog.showInput(message="hoge", initial="zzz")
res32: Option[java.lang.String] = None	←「取消し」を押した、またはダイアログを閉じたとき

showInputの戻り値の型は、入力データの型をOptionで包んだもの。
引数initialは入力データの初期値なので、その型と同じになる。

だったら、数値が直接入れられるかというと…

scala> Dialog.showInput(message="hoge", initial=0)
res35: Option[Int] = Some(0)

scala> res35.get
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

型はちゃんとOption[Int]になっているのだが、実際に入っているのはStringらしく、キャストできなくて例外が発生する。

実質的にはStringしか使えないと思った方が良さそうだ。

どうせなら変換関数を引数で渡すとか暗黙変換を利用するとかすればよかったのに。


Dialogオブジェクトのメソッド

メソッド名 引数名 デフォルト値 Java相当 備考
showMessage
使用例
parent Component null showMessageDialog メッセージを表示する。
戻り値は無し(Unit)。
message Any  
title String UIのデフォルト
messageType Message.Value Message.Info
icon Icon EmptyIcon
showConfirmation
使用例
parent Component null showConfirmDialog 確認する。(YesやNo等のボタンを押してもらう)
戻り型はResult.Value
message Any  
title String UIのデフォルト
optionType Options.Value Options.YesNo
messageType Message.Value Message.Question
icon Icon EmptyIcon
showOptions parent Component null showOptionDialog 複数のボタンを出力し、いずれかを押してもらう。
戻り型はResult.Value
message Any  
title String UIのデフォルト
optionType Options.Value Options.YesNo
messageType Message.Value Message.Question
icon Icon EmptyIcon
entries Seq[Any]  
initial Int  
showInput[A]
使用例
parent Component null showInputDialog 文字列を入力してもらう。
戻り型はOption[A]。
入力された値をSomeに包んで返す。
取り消したりウィンドウを閉じたりするとNoneが返る。
initialはダイアログの入力エリアの初期値。
入力データの型は型パラメーターAによって指定できるようになっているが、実質的にはStringしか使えない模様。
message Any  
title String UIのデフォルト
messageType Message.Value Message.Question
icon Icon EmptyIcon
entries Seq[A] Nil
initial A  

Dialogオブジェクトに関する列挙型

Dialogオブジェクトの各メソッドの引数や戻り型に使用しているMessage・Options・Resultは、Dialogオブジェクト内に定義されている列挙型のオブジェクト。

import scala.swing.Dialog.{Message, Options, Result}
あるいは
import scala.swing.Dialog._
オブジェクト名 列挙子 内容 備考
Message Error JOptionPane.ERROR_MESSAGE 相当 Javaのメッセージタイプ
Info JOptionPane.INFORMATION_MESSAGE 相当
Warning JOptionPane.WARNING_MESSAGE 相当
Question JOptionPane.QUESTION_MESSAGE 相当
Plain JOptionPane.PLAIN_MESSAGE 相当
Options Default JOptionPane.DEFAULT_OPTION 相当 Javaのオプションタイプ
YesNo JOptionPane.YES_NO_OPTION 相当
YesNoCancel JOptionPane.YES_NO_CANCEL_OPTION 相当
OkCancel JOptionPane.OK_CANCEL_OPTION 相当
Result Yes JOptionPane.YES_OPTION 相当 Javaの結果タイプ
Ok Yesと同じ
No JOptionPane.NO_OPTION 相当
Cancel JOptionPane.CANCEL_OPTION 相当
Closed JOptionPane.CLOSED_OPTION 相当

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