S-JIS[2011-01-15] 変更履歴
ScalaのSwingのダイアログにはDialogクラスとDialogオブジェクトがあり、DialogクラスはJavaのJDialog、DialogオブジェクトはJavaのJOptionPaneに相当する。
つまりDialogクラスは汎用的にダイアログを作成するのに使い、Dialogオブジェクトは単純なメッセージ表示・入力に使用する。
|
単純なメッセージを表示するダイアログ(MessageBox)の例。
(REPLからでも実行できる)
scala> import scala.swing.Dialog import scala.swing.Dialog scala> Dialog.showMessage(title="title!", message="zzz")
showMessage()メソッドの引数は 親コンポーネント・メッセージ・タイトル・メッセージタイプ・アイコンだが、デフォルト引数が指定されているので、不要な引数は省略できる。
また、指定する引数が少ない場合は引数名を指定して値をセットするのが便利。(順序も自由に変えられるし)
確認をするダイアログの例。
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
文字列を入力するダイアログの例。
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しか使えないと思った方が良さそうだ。
どうせなら変換関数を引数で渡すとか暗黙変換を利用するとかすればよかったのに。
メソッド名 | 引数名 | 型 | デフォルト値 | 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オブジェクトの各メソッドの引数や戻り型に使用している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 相当 |