ダイアログという部品はJFrameとあまり見た目は変わりません。
見た目はJFrameの大きさが標準的(このブログで使用しているサンプルプログラムと同じ300x200ぐらいのサイズ)であることが前提でこの半分ぐらいのサイズで表示される。
前回紹介したメニューバー同様レイアウトに依存しないため以下の方法で使用されることが多いです。
・メッセージ表示(警告や確認メッセージが表示されるだけ)
・YES/NOオプションダイアログ
・メッセージ表示(OKボタンなどのボタンがある)
・ファイルI/O
・オリジナルダイアログ
ちなみに上記のダイアログの使用方法はJavaではすべて実装可能ですがオリジナルダイアログ以外はメソッドを呼び出すだけで実現可能です。
Java APIでJOptionPaneクラスとJFileChooserクラスとJDialogクラスが用意されており、用途が限られているせいもあって前者2クラスをうまく組み合わせて使用することが多いです。
■JOptionPane
このクラスで使用するダイアログの機能は「文字列入力できる」、「メッセージを表示する」、「ボタンで確認要求する」の3つです。
これから紹介するメソッドやフィールド変数(このクラスのフィールド変数は全て定数)は「static」修飾なためJOptionPaneクラスはインスタンス化が必要ないためコンストラクタは省略しました。
JavaAPIで用意されているメソッドはかなりの量になるのですが、実は使用するメッソッドは以下のメッソッドとそれらのオーバーロード版だけ
・showConfirmDialog ・showInputDialog
・showMessageDialog ・showOptionDialog
ちなみに引数ですが、4つのメソッドすべてが以下の引数です。
第1引数:Component parentComponent
呼び出しもとの親フレームオブジェクトつまりJFrameオブジェクトを指定する。
よほどのことがない限り「this」でOKです。
第2引数:Object message
表示する内容(メッセージ)
基本的にはString型でOKだが、文字色などの文字書式を指定したいならJLabelでも可能
第3引数:String title
ダイアログのタイトルバーに表示するタイトル文字列を指定する。
第4引数:int optionType
表示するボタンのパターンを指定する。使用パターンは以下の表に従う
フィールド名 | オプション内容 |
---|---|
YES_NO_OPTION | YES/NOボタンが表示される |
YES_NO_CANCEL_OPTION | YES/NOボタンとキャンセルボタンを表示する |
OK_CANCEL_OPTION | OKボタンとキャンセルボタンを表示する |
表示するダイアログのアイコン(警告なら赤丸に×マークのような感じ)の種類を設定
種類は以下のとおり
フィールド名 | ダイアログの種類 |
---|---|
ERROR_MESSEAGE | エラーメッセージ |
INFORMATION_MESSAGE | 情報メッセージ |
WARNING_MESSAGE | 警告メッセージ |
QUESTION_MESSAGE | 質問メッセージ |
PLAIN_MESSAGE | アイコン非表示 |
ダイアログに表示するアイコンにオリジナルの画像を使用する場合に指定する。
ImageIconクラスに画像ファイルの相対パスを指定しておく
第7引数:String [ ] selectionValues
この引数はshowInputDialogメソッドとshowOptionDialogだけで指定する引数です。
表示する選択ボタンを配列長の数だけ設定して各要素の文字列をボタンに表示する
第8引数:String initialValue
この引数はshowInputDialogメソッドとshowOptionDialogだけで指定する引数です。
第7引数で指定した選択ボタンでデフォルトで選択する項目を指定する。
最後に戻り値ですが、
・showConfirmDialog :YESボタン又はOKボタン:0、NOボタン:1、キャンセルボタン:2が返されるので「int」
・showInputDialog :String文字列(第7引数と第8引数がある場合はshowOptionDialogと同じ)
・showMessageDialog :なし
・showOptionDialog :右上に表示される「×」ボタンで「-1」が選択したボタンの要素番号が返されるので「int」
showConfimDialogメソッドの戻り値識別用フィールド定数として「YES_OPTION」、「NO_OPTION」、「CANCEL_OPTION」、「OK_OPTION」が用意されておりそれぞれ対応しているためIF文で使い勝手がいい。
■まとめ
本当ならダイアログは1回で終わらせようと考えていたのですが、JOptonPaneクラスの内容が思っていた以上に多くなったため、
ここで40回目の内容は終了して今回入りきらなかった。「JFileChooserクラス」と「JDialogクラス」と「サンプルプログラム」は次回に回します。