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でも)。