JOptionPaneは、メッセージボックスやインプットボックスを表示するクラス。
|
|
public void MessageBox() { //●最も単純なメッセージ出力 JOptionPane.showMessageDialog(null, "メッセージ本文"); //●タイトルを付けたメッセージ出力 JOptionPane.showMessageDialog(null, "本文", "タイトル", JOptionPane.INFORMATION_MESSAGE); }
→独自のアイコンを指定する例 [2007-02-10]
メッセージには、\nで改行を指定できる。[2009-03-16]
また、<html>〜</html>タグで囲むことにより、HTMLを指定することも出来る。(JLabelと同様)
さらに、String以外にComponent(JLabel等)やIconを指定することも出来る。
その他のオブジェクトも指定できるが、その場合はtoString()したものが表示される。
public void MessageBox() { //●はい・いいえ・取消し int rc = JOptionPane.showConfirmDialog(null, "メッセージ本文"); switch (rc) { case JOptionPane.OK_OPTION: // case JOptionPane.YES_OPTION: System.out.println(rc + " OK");break; case JOptionPane.NO_OPTION: System.out.println(rc + " NO");break; case JOptionPane.CANCEL_OPTION: System.out.println(rc + " CANCEL");break; case JOptionPane.CLOSED_OPTION: System.out.println(rc + " ×ボタン");break; default: System.out.println(rc + " 未定義");break; } //●了解・取消し rc = JOptionPane.showConfirmDialog(null, "本文", "タイトル", JOptionPane.OK_CANCEL_OPTION); System.out.println(rc); //アイコンも指定してみる rc = JOptionPane.showConfirmDialog(null, "本文", "タイトル", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE); }
public void showMessageBox() { String[] button = { "ボタン1", "ボタン2", "ボタン3" }; int rc = JOptionPane.showOptionDialog(null, "message", "title", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, button, button[0]); switch (rc) { case JOptionPane.CLOSED_OPTION: System.out.println(rc + " close");break; default: System.out.println("ボタン" + (rc + 1));break; } }
public void InputBox() { String ret = JOptionPane.showInputDialog(null, "メッセージ"); if (ret == null) { System.out.println("cancel or close"); } else { System.out.println(ret); } //●テキストボックスに初期値を指定 ret = JOptionPane.showInputDialog(null, "メッセージ", "初期テキスト"); System.out.println(ret); //●タイトルとアイコンを指定 ret = JOptionPane.showInputDialog(null, "メッセージ", "タイトル", JOptionPane.PLAIN_MESSAGE); }
メソッド | 概要 | 値 | 備考 | 例 |
---|---|---|---|---|
showMessageDialog | メッセージを表示 | showMessageDialog | ||
メッセージタイプ (ダイアログに表示されるアイコンの種類を指定) |
PLAIN_MESSAGE | アイコン無し 独自アイコンを使う場合もこれ |
||
INFORMATION_MESSAGE | 情報(i) | |||
WARNING_MESSAGE | 警告(!) | |||
ERROR_MESSAGE | エラー(×) | |||
QUESTION_MESSAGE | クエスチョン(?) | |||
showConfirmDialog | 確認を求めるダイアログを表示 | showConfirmDialog | ||
オプションタイプ (ダイアログに表示されるボタンの種類を指定) |
DEFAULT_OPTION | 「了解」 | ||
YES_NO_OPTION | 「はい」「いいえ」 | |||
YES_NO_CANCEL_OPTION | 「はい」「いいえ」「取消し」 | |||
OK_CANCEL_OPTION | 「了解」「取消し」 | |||
戻り値 | OK_OPTION YES_OPTION |
了解 はい(値は同じ) |
||
NO_OPTION | いいえ | |||
CANCEL_OPTION | 取り消し | |||
CLOSED_OPTION | ダイアログが閉じられた | |||
showOptionDialog | 確認を求めるダイアログを表示 (ボタンをカスタマイズできる) |
showOptionDialog | ||
オプション (“ボタンに表示する文字列”の配列を指定) |
Object型だから、アイコンも可能かも? | |||
初期値 (最初にフォーカスが当たるボタンを指定) |
オプションの中の1つを指定 | |||
showInputDialog | 文字列を入力するダイアログを表示 | 入力された文字列が返る キャンセルされた場合はnull |
showInputDialog |
上記のメソッドはstaticメソッドなので、Swingを使ったウィンドウアプリ以外でも(例えばmain()関数から)直接呼び出してメッセージボックスを表示することが出来る。
ただしJDK1.4では、見えないウィンドウ(AWTのスレッド)が残ってしまうせいか、main()が終了してもアプリケーション自体は終了しない。
明示的にSystem.exit()を呼んで終わらせてやる必要がある。
JDK1.5以降ではそういう事をしなくてもちゃんと終了する。[2007-10-24]
もっと複雑な内容のダイアログを表示するには、JDialogを使う。[2009-04-06]
(実際のところ、showMessageDialog()やshowConfirmDialog()等でも、内部ではJDialogを作ってそれを表示している)
しかしながら、showMessageDialog()やshowConfirmDialog()では、messageにJPanel等のコンポーネントを指定することが出来る。
これを使うとOKやCANCELといったボタンがそのまま扱えるので、素のJDialogを使うよりも便利。
public static void showMyDialog() { JPanel panel = new JPanel(); BoxLayout layout = new BoxLayout(panel, BoxLayout.Y_AXIS); panel.setLayout(layout); panel.add(new JLabel("2つのテキスト入力エリアがある例")); JTextField text1 = new JTextField(); panel.add(text1); JTextField text2 = new JTextField(); panel.add(text2); int r = JOptionPane.showConfirmDialog( null, // オーナーウィンドウ panel, // メッセージ "タイトル", // ウィンドウタイトル JOptionPane.OK_CANCEL_OPTION, // オプション(ボタンの種類) JOptionPane.QUESTION_MESSAGE); // メッセージタイプ(アイコンの種類) System.out.println(r); System.out.println(text1.getText()); System.out.println(text2.getText()); }
上記のダイアログの戻り値はOK_OPTION(0)やCANCEL_OPTION(2)や×ボタン(-1)。
どのボタンで終了しても、ダイアログで入力していたtext1やtext2の値は取得できる。
しかしこのやり方だと、デフォルトのフォーカスが当たるのは先頭のボタンになる(独自JPanel上のコンポーネントでなく)。
showConfirmDialog()達はstaticメソッドなので、オーバーライドして独自処理を行うことは出来ない…。
という訳で、JOptionPaneを直接コンストラクターから生成すればメソッドをオーバーライドできるようになる。[2009-04-06]
ボタンにフォーカスを与えているのはデフォルトのselectInitialValue()メソッドなので、これを呼ばないようにする。
このメソッドの中で特にフォーカスの設定を行わなければ、普通に左上にある入力可能コンポーネントにフォーカスが当たる。
static void showConstructorDialog() {
JPanel panel = new JPanel();
〜 パネルの初期化:同上 〜
JOptionPane pane = new JOptionPane(
panel, // メッセージ
JOptionPane.QUESTION_MESSAGE, // メッセージタイプ(アイコンの種類)
JOptionPane.OK_CANCEL_OPTION // オプション(ボタンの種類)
) {
private static final long serialVersionUID = 1L;
@Override
public void selectInitialValue() {
// super.selectInitialValue(); //ボタンにフォーカスを当てる
}
};
JDialog dialog = pane.createDialog(
null, // オーナーウィンドウ
"タイトル"); // ウィンドウタイトル
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
Object r = pane.getValue();
System.out.println(r);
System.out.println(text1.getText());
System.out.println(text2.getText());
}
ダイアログの戻り値(どのボタンによって終了したか)はJOptionPane#getValue()で分かる。
ウィンドウの右上の×ボタンで終了した場合はnull。
OKボタンの場合はOK_OPTION(0)、キャンセルボタンならCANCEL_OPTION(2)となる。ただし型はInteger。
どのボタンによって終了しても、ダイアログで入力していたtext1やtext2の値は取得できる。
※このやり方の場合、このダイアログを表示するのみのプログラムでは、ダイアログを閉じてもプログラム終了とはならない(JDK1.6でも)。