Dialogを表示するメソッドのうち、Internalでないものの全てです。
戻値 | method | ( | Component parentCmp |
Object message |
String title, |
int optionType |
int messageType |
Icon icon |
Object[] selfrom |
Object initVal |
) |
int | showConfirmDialog | ( | parent, | message | オプションの選択 | YES_NO_CANCEL | QUESTION | ? | ) | ||
int | showConfirmDialog | ( | parent, | message | title | optTp | QUESTION | ? | ) | ||
int | showConfirmDialog | ( | parent, | message, | title, | optTp, | msgTp | ← | ) | ||
int | showConfirmDialog | ( | parent, | message, | title, | optTp, | msgTp, | icon | ) | ||
int | showOptionDialog | ( | parent, | message, | title, | optTp, | msgTp, | icon, | options, | initVal | ) |
void | showMessageDialog | ( | parent, | message | メッセージ | DEFAULT | INFORMATION | i | ) | ||
void | showMessageDialog | ( | parent, | message, | title, | DEFAULT | msgTp | ← | ) | ||
void | showMessageDialog | ( | parent, | message, | title, | DEFAULT | msgTp, | icon | ) | ||
String | showInputDialog | ( | parent, | message | 入力 | OK_CANCEL | QUESTION | ? | ) | ||
String | showInputDialog | ( | parent, | message, | 入力 | OK_CANCEL | QUESTION | ? | initVal | ) | |
String | showInputDialog | ( | parent, | message, | title, | OK_CANCEL | msgTp | ← | ) | ||
Object | showInputDialog | ( | parent, | message, | title, | OK_CANCEL | msgTp, | icon, | selValues, | initVal | ) |
String | showInputDialog | ( | null | message | 入力 | OK_CANCEL | QUESTION | ? | ) | ||
String | showInputDialog | ( | null | message, | 入力 | OK_CANCEL | QUESTION | ? | initVal | ) |
intの定数値いろいろ
methodがintを 返す場合の値 |
optionType (選択ボタンのセット) |
messageType ( ! や ? のアイコンの選択) |
---|---|---|
JOptionPane.YES_OPTION(0) JOptionPane.NO_OPTION(1) JOptionPane.CANCEL_OPTION(2) JOptionPane.OK_OPTION(0) JOptionPane.CLOSED_OPTION(-1) |
JOptionPane.DEFAULT_OPTION(-1) JOptionPane.YES_NO_OPTION(0) JOptionPane.YES_NO_CANCEL_OPTION(1) JOptionPane.OK_CANCEL_OPTION (2) |
JOptionPane.ERROR_MESSAGE(0) JOptionPane.INFORMATION_MESSAGE(1) JOptionPane.WARNING_MESSAGE(2) JOptionPane.QUESTION_MESSAGE(3) JOptionPane.PLAIN_MESSAGE (-1) |
Confirmは確認です。
親コンポーネントはnullでも認められます。
messageはObjectなので表示できるものなら何でもいいのですが、とりあえず文字列で進めます。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; //showConfirmDialog のテスト public class CDTest1 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; int ret = showConfirmDialog( parent, message ); if (ret==YES_OPTION) System.out.println("YES_OPTION:"+ret); if (ret==NO_OPTION) System.out.println("NO_OPTION:"+ret); if (ret==CANCEL_OPTION) System.out.println("CANCEL_OPTION:"+ret); if (ret==OK_OPTION) System.out.println("OK_OPTION:"+ret); if (ret==CLOSED_OPTION) System.out.println("CLOSED_OPTION:"+ret); } }
実行結果
省略されたoptionTypeはYES_NO_CANCEL_OPTION、messageTypeはQUESTION_MESSAGEです。
YES,OKは共に0。intの戻り値はどのOptionTypeでも共通です。
$ java optionpane/CDTest1 YES_OPTION:0 OK_OPTION:0 $ java optionpane/CDTest1 NO_OPTION:1 $ java optionpane/CDTest1 CANCEL_OPTION:2 $ java optionpane/CDTest1 CLOSED_OPTION:-1 |
CLOSED_OPTIONはダイアログのクローズボタンを押した場合。linux-gnomeではクローズボタンはありませんがコンテキストメニューから[閉じる]を選択できます。
タイトルバーの文字列と選択肢のボタンを指定します
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; public class CDTest2 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; int optTp = YES_NO_OPTION; //ここを変化させる int ret = showConfirmDialog( parent, message, title, optTp ); System.out.println("戻り値:"+ret); if (optTp==DEFAULT_OPTION) System.out.println("DEFAULT_OPTION:"+optTp); if (optTp==YES_NO_OPTION) System.out.println("YES_NO_OPTION:"+optTp); if (optTp==YES_NO_CANCEL_OPTION) System.out.println("YES_NO_CANCEL_OPTION:"+optTp); if (optTp==OK_CANCEL_OPTION) System.out.println("OK_CANCEL_OPTION:"+optTp); } }
実行結果
int optTp = ...を変えて、4通りやっています。
省略されたmessageTypeはQUESTION_MESSAGEになっているとわかります。
intの戻り値は全部の場合を調べましたが、どのOptionTypeでも共通なのが確認できます。
int optTp = DEFAULT_OPTION; |
$ java optionpane/CDTest2 戻り値:0 DEFAULT_OPTION:-1 | |
int optTp = YES_NO_OPTION; |
$ java optionpane/CDTest2 戻り値:0 YES_NO_OPTION:0 $ java optionpane/CDTest2 戻り値:1 YES_NO_OPTION:0 | |
int optTp = YES_NO_CANCEL_OPTION; |
$ java optionpane/CDTest2 戻り値:0 YES_NO_CANCEL_OPTION:1 $ java optionpane/CDTest2 戻り値:1 YES_NO_CANCEL_OPTION:1 $ java optionpane/CDTest2 戻り値:2 YES_NO_CANCEL_OPTION:1 | |
int optTp = OK_CANCEL_OPTION; |
$ java optionpane/CDTest2 戻り値:0 OK_CANCEL_OPTION:2 $ java optionpane/CDTest2 戻り値:2 OK_CANCEL_OPTION:2 |
タイトルバーの文字列と選択肢のボタンに加え、メッセージのタイプを指定します。見え方の違いはアイコンだけです。
上図スクリーンショットでは選択肢のボタンはDEFAULT_OPTIONに固定しています
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; public class CDTest3 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; int optTp = DEFAULT_OPTION; //固定 int msgTp = QUESTION_MESSAGE; //PLAIN_MESSAGE; ここを変化させる int ret = showConfirmDialog( parent, message, title, optTp, msgTp ); System.out.println("戻り値:"+ret); if (msgTp==ERROR_MESSAGE) System.out.println("ERROR_MESSAGE:"+msgTp); if (msgTp==INFORMATION_MESSAGE) System.out.println("INFORMATION_MESSAGE:"+msgTp); if (msgTp==WARNING_MESSAGE) System.out.println("WARNING_MESSAGE:"+msgTp); if (msgTp==QUESTION_MESSAGE) System.out.println("QUESTION_MESSAGE:"+msgTp); if (msgTp==PLAIN_MESSAGE) System.out.println("PLAIN_MESSAGE:"+msgTp); } }
実行結果
int optTp = DEFAULT_OPTION; は固定です。
int msgTp = ...を変えて、5通りやっています。
DEFAULT_OPTIONしかないので、intの戻り値はいつも0です。
int msgTp = ERROR_MESSAGE; |
$ java optionpane/CDTest3 戻り値:0 ERROR_MESSAGE:0 | |
int msgTp = INFORMATION_MESSAGE; |
$ java optionpane/CDTest3 戻り値:0 INFORMATION_MESSAGE:1 | |
int msgTp = WARNING_MESSAGE; |
$ java optionpane/CDTest3 戻り値:0 WARNING_MESSAGE:2 | |
int msgTp = QUESTION_MESSAGE; |
$ java optionpane/CDTest3 戻り値:0 QUESTION_MESSAGE:3 | |
int msgTp = PLAIN_MESSAGE; |
$ java optionpane/CDTest3 戻り値:0 PLAIN_MESSAGE:-1 |
タイトルバーの文字列と選択肢のボタン、メッセージのタイプに加えて、アイコンも指定します。メッセージのタイプは無視された形になります。
上図スクリーンショットでは選択肢のボタンはDEFAULT_OPTIONにしていますが、変更はできます。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; import javax.swing.ImageIcon; public class CDTest4 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; int optTp = DEFAULT_OPTION; //固定 int msgTp = INFORMATION_MESSAGE; //PLAIN_MESSAGE; 無視される ImageIcon icon = new ImageIcon("optionpane/ninjin.png"); int ret = showConfirmDialog( parent, message, title, optTp, msgTp, icon ); System.out.println("戻り値:"+ret); if (msgTp==ERROR_MESSAGE) System.out.println("ERROR_MESSAGE:"+msgTp); if (msgTp==INFORMATION_MESSAGE) System.out.println("INFORMATION_MESSAGE:"+msgTp); if (msgTp==WARNING_MESSAGE) System.out.println("WARNING_MESSAGE:"+msgTp); if (msgTp==QUESTION_MESSAGE) System.out.println("QUESTION_MESSAGE:"+msgTp); if (msgTp==PLAIN_MESSAGE) System.out.println("PLAIN_MESSAGE:"+msgTp); } }
実行結果
int optTp = DEFAULT_OPTION; は固定です。
int msgTp = ...を変えて、2通りやっていますが、iconを指定するとmessageTypeは無視されます。
今回もDEFAULT_OPTIONしかないので、intの戻り値はいつも0です。
$ javac optionpane/CDTest4.java $ java optionpane/CDTest4 戻り値:0 QUESTION_MESSAGE:3 $ javac optionpane/CDTest4.java $ java optionpane/CDTest4 戻り値:0 INFORMATION_MESSAGE:1 |
親コンポーネントを指定するデモです。
いままで、nullにしていたparentですが、Componentを指定するのが本来です。API仕様には、「直系の既知のサブクラス」として Button, Canvas, Checkbox, Choice, Container, Label, List, Scrollbar, TextComponent が書かれています。
親コンポーネントはダイアログの表示位置の基準となるとともに、ダイアログでユーザーの対話が終了するまで操作をブロックする対象でもあります。このようなダイアログをモーダルといいます。showXxxDialog メソッドで生成されるダイアログはすべてモーダルです。
2つのボタンを置き、クリックしたボタンを親コンポーネントにダイアログを出すプログラムで確認してみます。
package optionpane; import java.awt.*; import java.awt.event.*; import javax.swing.*; import static javax.swing.JOptionPane.*; public class CDTest5 implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { Component parent = (Component)e.getSource(); //Object->Component String message = e.getActionCommand(); String title = "タイトルバーの文字"; int optTp = DEFAULT_OPTION; int msgTp = INFORMATION_MESSAGE; int ret = showConfirmDialog( parent, message, title, optTp, msgTp, icon ); System.out.println("戻り値:"+ret); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } public static void createAndShowGUI() { JLabel label = new JLabel(" 押したボタンがダイアログの親になります ",JLabel.CENTER); JButton button1 = new JButton("West"); JButton button2 = new JButton("East"); CDTest5 cdtest= new CDTest5(); button1.addActionListener(cdtest); button2.addActionListener(cdtest); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(label, BorderLayout.CENTER); panel.add(button1, BorderLayout.WEST); panel.add(button2, BorderLayout.EAST); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(panel); frame.pack(); frame.setVisible(true); } }
実行結果
起動直後 クリックした方のボタンが親コンポーネントになります。
Westボタンクリック Westボタンを中心にダイアログが出ます。
Eastボタンクリック Eastボタンを中心にダイアログが出ます。
サンプルプログラムではaddActionListener()の引数がたいていはthisで存在意味が理解しにくいのですが、このプログラムではCDTest5クラスのインスタンスになっています。ActionListenerインターフェースを持ったクラスのインスタンスを引数にするというのがよくわかります。
actionPerformed(ActionEvent e)は引数がActionEventのインスタンスだけですから、フィールドの変数を使うことが多いのですが、今回はそれをせずにgetSource()とgetActionCommand()で済ませています。
messageはとりあえず文字列でやってきましたが、Objectになっていますので表示できるものなら何でもいいのです。JTextAreaが入ったJScrollPaneにしてみます。
package optionpane; import java.awt.*; import java.awt.event.*; import javax.swing.*; import static javax.swing.JOptionPane.*; public class CDTest6 implements ActionListener{ JTextArea text = new JTextArea(10,20); JScrollPane message = new JScrollPane(text); int ct = 0; int yct = 0; int nct = 0; public void actionPerformed(ActionEvent e) { Component parent = (Component)e.getSource(); //Object->Component //JLabel message = label; //e.getActionCommand(); text.append(++ct+" "+e.getActionCommand()+" Y:"+ct+" N:"+nct+"\n"); String title = "タイトルバーの文字"; int optTp = YES_NO_OPTION; int msgTp = INFORMATION_MESSAGE; int ret = showConfirmDialog( parent, message, title, optTp, msgTp ); if (ret==YES_OPTION) yct++; if (ret==NO_OPTION) nct++; } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } public static void createAndShowGUI() { JLabel label = new JLabel(" 押したボタンがダイアログの親になります ",JLabel.CENTER); JButton button1 = new JButton("West"); JButton button2 = new JButton("East"); CDTest6 cdtest= new CDTest6(); button1.addActionListener(cdtest); button2.addActionListener(cdtest); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(label, BorderLayout.CENTER); panel.add(button1, BorderLayout.WEST); panel.add(button2, BorderLayout.EAST); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(panel); frame.pack(); frame.setVisible(true); } }
JCheckBoxが入ったJPanelにしてみます。ダイアログでの選択の後、オプションボタン以外の値を受け取ることが目的です。
要するに、ダイアログが閉じられても、JCheckBoxのインスタンスは存在するので、そこかに問い合わせるということです。
package optionpane; import java.awt.*; import java.awt.event.*; import javax.swing.*; import static javax.swing.JOptionPane.*; public class CDTest7 extends JPanel implements ActionListener{ JTextArea text = new JTextArea(10,20); JCheckBox[] cbs = {new JCheckBox("りんご"),new JCheckBox("とまと"),new JCheckBox("なすび")}; JPanel message = new JPanel(); public CDTest7(){ JScrollPane scpane = new JScrollPane(text); JLabel label = new JLabel("今回の果実を選択してください",JLabel.CENTER); JButton button = new JButton("select"); button.addActionListener(this); setLayout(new BorderLayout()); add(label, BorderLayout.NORTH); add(scpane, BorderLayout.CENTER); add(button, BorderLayout.SOUTH); for(int i=0; cbs.length>i; i++){ message.add(cbs[i]); } } public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("select")){ String title = "果実選択"; int optTp = OK_CANCEL_OPTION; int msgTp = QUESTION_MESSAGE; int ret = showConfirmDialog( this, //parent, message, title, optTp, msgTp ); if (ret==OK_OPTION){ for(int i=0; cbs.length>i; i++){ if(cbs[i].isSelected()){ text.append(cbs[i].getText()+" "); } } text.append("\n"); } } } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } public static void createAndShowGUI() { CDTest7 cdtest= new CDTest7(); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(cdtest); frame.pack(); frame.setVisible(true); } }
起動直後です
Selectボタンで入力中
[OK]するとテキストエリアに書きだされます。
繰り返し入力できます
optionTypeというのはYES_NO_OPTION、YES_NO_CANCEL_OPTIONの様に応答の選択肢の組み合わせのタイプということです。このoptionの自由な指定に特化したのがshowOptionDialogです。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; import javax.swing.ImageIcon; public class ODTest1 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; int optTp = DEFAULT_OPTION; int msgTp = INFORMATION_MESSAGE; ImageIcon icon = new ImageIcon("optionpane/ninjin.png"); String[] options = {"アジサイ","シバザクラ","レンギョウ","テッセン","スミレ"}; int ret = showOptionDialog( parent, message, title, optTp, msgTp, icon, options, options[0] ); System.out.println("戻り値:"+ret+"="+options[ret]); } }
実行結果
戻り値は選択肢の配列のindexになります。
$ java optionpane.ODTest1 戻り値:2=レンギョウ
独自の選択肢はObjectの配列を指定できるというので、文字列以外を試します。まずは画像。
ナスとアリは背景が透過の画像です。ユリと渦巻は背景が白の画像です。一般のJButtonは背景色をフラットな白にもできますが、showOptionDialogのボタンは難しいと思います。Look&Feelの設定をいじる必要があるようです。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; import javax.swing.ImageIcon; public class ODTest2 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; int optTp = DEFAULT_OPTION; int msgTp = INFORMATION_MESSAGE; //PLAIN_MESSAGE; ImageIcon icon = new ImageIcon("optionpane/ninjin.png"); ImageIcon[] options = { new ImageIcon("optionpane/nasu.png"), new ImageIcon("optionpane/hakiri.png"), new ImageIcon("optionpane/yuri.png"), new ImageIcon("optionpane/spl.png") }; int ret = showOptionDialog( parent, message, title, optTp, msgTp, icon, options, options[0] ); int ret2 = showConfirmDialog( null, //parent, options[ret], //message "選択した画像", //title DEFAULT_OPTION, PLAIN_MESSAGE ); } }
実行結果
選択した結果をshowConfirmDialogで表示しています。
Java SE7のAPI仕様に、「options - ユーザーが選択可能な項目を示すオブジェクトの配列。オブジェクトがコンポーネントの場合は適切にレンダリングされる。」とあるので、Object[]がComponent[]でもいいのかと試してみました。これはダメです。
JButton, JLabel, JCheckBox, JTextField を要素にしたものです。「適切にレンダリングされ」ましたが、選択することができません。ボタンには画像と文字しか貼ることができないと言う事なのかも知れません。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; import javax.swing.*; public class ODTest3 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; int optTp = DEFAULT_OPTION; int msgTp = INFORMATION_MESSAGE; ImageIcon icon = new ImageIcon("optionpane/kani.png"); Component[] options = { new JButton("button"), new JLabel("label"), new JCheckBox("CheckBox"), new JTextField("TextField") }; int ret = showOptionDialog( parent, message, title, optTp, msgTp, icon, options, options[1] ); if(ret==CLOSED_OPTION)ret=3; int ret2 = showConfirmDialog( null, //parent, options[ret], //message "選択した部品", //title DEFAULT_OPTION, PLAIN_MESSAGE ); } }
実行結果
ボタンは押せますし、チェックも入ります、文字入力もできますが選択できません。
閉じるボタン[✕]を押す(Linux-Gnomeではコンテキストメニューから閉じるを選択する)と戻り値がCLOSED_OPTION(-1)で閉じることができますので、この場合にJTextFieldを選択したように振る舞うようにしました。
一番の特徴は戻り値がないこと
親コンポーネントはnullでも認められます。
messageはObjectなので表示できるものなら何でもいいのですが、とりあえず文字列で進めます。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; public class MDTest1 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; showMessageDialog( parent, message ); } }
どうせ戻り値がありませんから、optionTypeは意味がありません。messageType(アイコン)の指定するタイプが次に来ます
スクリーンショットはCDTest3.javaでoptionTypeをDEFAULT_OPTIONにしたものと同等です。
int msgTp = ERROR_MESSAGE; | int msgTp = INFORMATION_MESSAGE; | ||
int msgTp = WARNING_MESSAGE; | int msgTp = QUESTION_MESSAGE; | ||
int msgTp = PLAIN_MESSAGE; |
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; public class MDTest2 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; int msgTp = PLAIN_MESSAGE; //ここを変化させる showMessageDialog( parent, message, title, msgTp ); } }
アイコンも指定します。メッセージのタイプは無視された形になります。
スクリーンショットはCDTest4.javaでoptionTypeをDEFAULT_OPTIONにしたものと同等です。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; import javax.swing.ImageIcon; public class MDTest3 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; int msgTp = INFORMATION_MESSAGE; //PLAIN_MESSAGE; 無視される ImageIcon icon = new ImageIcon("optionpane/ninjin.png"); showMessageDialog( parent, message, title, msgTp, icon ); } }
入力枠があり戻り値は文字列です。
親コンポーネントはnullでも認められます。親コンポーネントを指定しないタイプもあります。 "null,"の部分を書かなければそのタイプです。
messageはObjectなので表示できるものなら何でもいいのですが、とりあえず文字列で進めます。
titleは"入力"となります。
optionType(選択肢)はOK_CANCEL_OPTION、messageTypeはQUESTION_MESSAGEになります。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; public class IDTest1 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String ret = showInputDialog( parent, message ); System.out.println("return value:"+ret); } }
実行結果
[はい]を選ぶと、入力したものが文字列として戻り値になります。入力がないと""です。
[いいえ]を選ぶと、戻り値はnullになります。
showInputDialog(1)と同様です。入力に初期値が入っているところだけ異なります。
親コンポーネントはnullでも認められます。親コンポーネントを指定しないタイプもあります。 "null,"の部分を書かなければそのタイプです。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; public class IDTest2 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String initvalue = "初期値を書いておきます"; String ret = showInputDialog( parent, message, initvalue ); System.out.println("return value:"+ret); } }
実行結果
[はい]を選ぶと、入力したものが文字列として戻り値になります。入力がないと""です。
[いいえ]を選ぶと、戻り値はnullになります。
タイトルバーの文字列とメッセージのタイプを指定します。見え方の違いはアイコンだけです。
int msgTp = ERROR_MESSAGE; | int msgTp = INFORMATION_MESSAGE; | ||
int msgTp = WARNING_MESSAGE; | int msgTp = QUESTION_MESSAGE; | ||
int msgTp = PLAIN_MESSAGE; |
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; public class IDTest3 { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; int msgTp = ERROR_MESSAGE; //ここを変化させる String ret = showInputDialog( parent, message, title, msgTp ); System.out.println("return value:"+ret); } }
実行結果
[はい]を選ぶと、入力したものが文字列として戻り値になります。入力がないと""です。
[いいえ]を選ぶと、戻り値はnullになります。
選択肢から選択します。
選択肢以外の値を入力できず、選択肢がObject[]で与えられるので、OptionDialogに似ています。戻り値は選択されたObjectの値となります。OptionDialogは全てintでしたから、InputDialogに分類したのでしょう。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; import javax.swing.ImageIcon; public class IDTest4a { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; //int optTp = DEFAULT_OPTION; int msgTp = INFORMATION_MESSAGE; //PLAIN_MESSAGE; ImageIcon icon = new ImageIcon("optionpane/ninjin.png"); String[] selValues = {"アジサイ","シバザクラ","レンギョウ","テッセン","スミレ"}; Object retobj = showInputDialog( parent, message, title, //optTp, msgTp, icon, selValues, selValues[0] ); System.out.println("return value:"+retobj); } }
実行結果
初期値が表示されます
入力欄をクリックすると選択肢リストが出てきます。
選択後に[OK]を選ぶと、選択したものがObjectとして戻り値になります。[OK]を選ぶ限り、入力がないことはありえません。
System.out.println()では、toString()を使って表示しますから、Objectのままでも文字列になって「レンギョウ」などと端末に表示されます(省略)。
[取消]を選ぶか、閉じるボタン[✕]で、戻り値はnullになります。
Objectの配列を指定できるというので、文字列以外を試します。まずは画像。
showOptionDialogの画像と同様、選択した結果をshowConfirmDialogで表示しています。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; import javax.swing.ImageIcon; public class IDTest4b { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; int optTp = DEFAULT_OPTION; int msgTp = INFORMATION_MESSAGE; //PLAIN_MESSAGE; ImageIcon icon = new ImageIcon("optionpane/ninjin.png"); ImageIcon[] selValues = { new ImageIcon("optionpane/nasu.png"), new ImageIcon("optionpane/hakiri.png"), new ImageIcon("optionpane/yuri.png"), new ImageIcon("optionpane/spl.png") }; Object retobj = showInputDialog( parent, message, title, //optTp, msgTp, icon, selValues, selValues[0] ); int ret = showConfirmDialog( null, //parent, retobj, //message "選択した画像", //title DEFAULT_OPTION, PLAIN_MESSAGE ); } }
実行結果
初期値が表示されます
入力欄をクリックすると選択肢リストが出てきます。
選択後に[OK]を選ぶと、選択したものがObjectとして戻り値になります。これをshowConfirmDialogで表示します。
[取消]を選ぶか、閉じるボタン[✕]で、戻り値はnullになります。その場合は空のshowConfirmDialogになります(省略)。
Componentを選択するshowOptionDialogと同趣向です。今回は表示は実用になりませんが、選択はでき、showConfirmDialogでの表示もできます。
package optionpane; import java.awt.Component; import javax.swing.JOptionPane; import static javax.swing.JOptionPane.*; import javax.swing.*; public class IDTest4c { public static void main(String[] args) { Component parent = null; String message = "メッセージ(ここはObject)"; String title = "タイトルバーの文字"; int optTp = DEFAULT_OPTION; int msgTp = INFORMATION_MESSAGE; //PLAIN_MESSAGE; ImageIcon icon = new ImageIcon("optionpane/kani.png"); Component[] selValues = { new JButton("button"), new JLabel("label"), new JCheckBox("CheckBox"), new JTextField("TextField") }; Object retobj = showInputDialog( parent, message, title, //optTp, msgTp, icon, selValues, selValues[3] ); int ret = showConfirmDialog( null, //parent, retobj, //message "選択した部品", //title DEFAULT_OPTION, PLAIN_MESSAGE ); } }
実行結果
ComponentのtoString()に従って表示されます。初期値の指定によりTextFieldが見えます
選択中の画像は略。これはbuttonを選択した後のものです。
[OK]でボタンが表示されます。