Java Swing – JOptionPaneのshowInputDialogの例
これは
JOptionPane`クラスの
showInputDialog()
メソッドのレビューです。この方法では、ダイアログウィンドウをカスタマイズしながら入力を促すことができます。 `showConfirmDialog`は
String`か `Object`のいずれかを返し、次のパラメータの組み合わせを使って呼び出すことができます:
Object(returns String)
– ユーザーからの入力を要求する質問メッセージダイアログを表示します。
Object、Object(String String)
– 入力値を初期化してユーザからの入力を要求する質問メッセージダイアログを表示します。
Component、Object(String)
– ユーザーからの入力を要求する質問メッセージダイアログを表示します。入力をStringとして返します。コンポーネントは、ダイアログが表示されるFrameを決定します。 nullの場合、またはparentComponentにFrameがない場合は、デフォルトのFrameが使用されます。
Component、Object、Object(Stringを返す)
– 上記と同じです。唯一の違いは、入力フィールドには最後のObjectパラメーターで設定された初期値があることです。
Component、Object、String、int(Stringを返します)
– ユーザからの入力を要求するダイアログを表示します。このダイアログには、Stringパラメータで設定されたタイトルと、intパラメータで設定されたMessageTypeがあります。 `JOptionPane`のための異なるMessageTypesは次のとおりです:
Component、Object、String、int、Icon、Object[]、Object(オブジェクトを返します)
– 初期選択、可能な選択、および他のすべてのオプションを指定できるブロッキングダイアログで入力を求めるプロンプトを表示します。
ダイアログ内にアイコン(nullでない場合)が表示され、デフォルトのMessageTypeアイコンが上書きされます。
1. Object –
ユーザー入力を得るための最も簡単な方法
ユーザー入力を `String`として取得する質問メッセージダイアログの例:
SimpleInputDialog1.java
package com.techfou.inputDialog;
import javax.swing.JOptionPane;
public class SimpleInputDialog1 {
public static void main(String[]args){
String m = JOptionPane.showInputDialog("Anyone there?");
System.out.println(m);
}
}
出力:

入力欄に「Hellooooo !!!!」と入力して「OK」をクリックすると、
Hellooooo!!!!
2.オブジェクト
ユーザ入力を `String`として取得する初期値を持つquestion-messageダイアログの例:
SimpleInputDialog2.java
package com.techfou.inputDialog;
import javax.swing.JOptionPane;
public class SimpleInputDialog2 {
public static void main(String[]args){
String m = JOptionPane.showInputDialog("Anyone there?", 42);
System.out.println(m);
}
}
出力:

3.コンポーネント
Component`をnullに設定すると、結果は数字1と同じになります。この例では、ダイアログを入れる
JFrame`を作成します。ユーザーがフィールドに何かを入力しない限り、フレームは閉じます:
InputDialogInFrame.java
package com.mkyong.inputDialog;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class InputDialogInFrame extends JFrame{
public InputDialogInFrame() {
getContentPane().setBackground(Color.DARK__GRAY);
setTitle("Input Dialog in Frame");
setDefaultCloseOperation(JFrame.EXIT__ON__CLOSE);
setVisible(true);
setResizable(false);
setSize(400, 300);
getContentPane().setLayout(null);
}
private void closeIt(){
this.getContentPane().setVisible(false);
this.dispose();
}
public static void main(String[]args){
InputDialogInFrame frame = new InputDialogInFrame();
String m = JOptionPane.showInputDialog(frame, "Anyone there?");
if(m.isEmpty()){
frame.closeIt();
}
}
}
出力:

4.コンポーネント、オブジェクト
`Component`をnullに設定すると、結果は2と同じになります。この例では、コードを3番から少し変更します:
InputDialogInFrame.java
package com.mkyong.inputDialog;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class InputDialogInFrame extends JFrame{
public InputDialogInFrame() {
getContentPane().setBackground(Color.DARK__GRAY);
setTitle("Input Dialog in Frame");
setDefaultCloseOperation(JFrame.EXIT__ON__CLOSE);
setVisible(true);
setResizable(false);
setSize(400, 300);
getContentPane().setLayout(null);
}
private void closeIt(){
this.getContentPane().setVisible(false);
this.dispose();
}
public static void main(String[]args){
InputDialogInFrame frame = new InputDialogInFrame();
String m = JOptionPane.showInputDialog(frame, "Anyone there?", 42);
if(m.isEmpty() || m.equals("42")){
frame.closeIt();
}
}
}
出力:

5.コンポーネント、オブジェクト、文字列
`JOptionPane.INFORMATION__MESSAGE`を通してデフォルトアイコンを使用する情報メッセージの例:
SimpleInputDialog5.java
package com.mkyong.inputDialog;
import javax.swing.JOptionPane;
public class SimpleInputDialog5 {
public static void main(String[]args){
String m = JOptionPane.showInputDialog(null, "Broccoli is tasty!",
"Green dinner", JOptionPane.INFORMATION__MESSAGE);
System.out.println(m);
}
}
出力:

コンポーネント、オブジェクト、文字列、int、アイコン、オブジェクト[]&Object –
Inputダイアログ(定義済みのオプション)
6.1この例では、ユーザーが選択できるオプションのセットを提供します。さまざまなオプションが、選択された初期値を持つドロップダウンメニューの形式で表示されます。
InputDialog6a.java
package com.mkyong.inputDialog;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
public class InputDialog6a {
public static void main(String[]args) {
String[]options = {"I adore turtles", "Yes", "Maybe", "Urm...", "No", "Hate them"};
ImageIcon icon = new ImageIcon("src/images/turtle32.png");
String n = (String)JOptionPane.showInputDialog(null, "Do you like turtles??",
"I like turtles", JOptionPane.QUESTION__MESSAGE, icon, options, options[2]);
System.out.println(n);
}
}
出力:

オプション “I’ll be turtles”を選択し、 “OK”をクリックすると、
I adore turtles
6.2 Integerの配列を使った例:
InputDialog6b.java
package com.mkyong.inputDialog;
import javax.swing.JOptionPane;
public class InputDialog6b {
public static void main(String[]args) {
Integer[]options = {2, 3, 5, 7, 9, 11};
int n = (Integer)JOptionPane.showInputDialog(null, "Pick a number that is not prime:",
"Prime numbers", JOptionPane.QUESTION__MESSAGE, null, options, options[2]);
System.out.println(n);
}
}
出力:

6.3ダイナミクスをメソッドの `Object array`とObjectの戻り値の型を利用する例:
InputDialog6c.java
package com.mkyong.inputDialog;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
public class InputDialog6c {
public static void main(String[]args) {
Object[]options = {2, "No", 5.6, true};
Object l = JOptionPane.showInputDialog(null, "Just pick something already!",
"Mix & Match", JOptionPane.ERROR__MESSAGE, null, options, options[0]);
if(l instanceof Integer){
System.out.println("You picked an Integer!");
}else if(l instanceof String){
System.out.println("You picked a String!");
}else if(l instanceof Double){
System.out.println("You picked a Double!");
}else if(l instanceof Boolean){
System.out.println("You picked a Boolean!");
}
}
}
出力:

「2」が選択され、ユーザが「OK」をクリックすると:
You picked an Integer!
「いいえ」が選択され、ユーザーが「OK」をクリックすると:
You picked a String!
「5.6」が選択され、ユーザーが「OK」をクリックすると:
You picked a Double!
「true」が選択され、ユーザーが「OK」をクリックすると:
You picked a Boolean!
7.より高度な例
前のすべての例で
Object`の代わりに
String`が使われました。この例では、
Object`の代わりに
JPanel`を使用します。
JPanel`はカスタマイズされ、
JLabel`が追加されています。また、
UIManager`の呼び出しを使って
OptionPane`のサイズを操作しています。
InputDialogPanel.java
package com.mkyong.inputDialog;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;
public class InputDialogPanel {
public static void main(String[]args) {
JPanel panel = new JPanel();
panel.setBackground(new Color(0, 0, 0));
panel.setSize(new Dimension(250, 32));
panel.setLayout(null);
JLabel label = new JLabel("It's your choice! :)");
label.setForeground(new Color(255, 255, 0));
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setFont(new Font("Arial", Font.BOLD, 11));
label.setBounds(0, 0, 250, 32);
panel.add(label);
UIManager.put("OptionPane.minimumSize",new Dimension(270, 120));
Object[]options = {2, "No", 5.6, true};
Object l = JOptionPane.showInputDialog(null, panel,
"Mix & Match", JOptionPane.PLAIN__MESSAGE, null, options, options[3]);
if(l instanceof Integer){
System.out.println("You picked an Integer!");
}else if(l instanceof String){
System.out.println("You picked a String!");
}else if(l instanceof Double){
System.out.println("You picked a Double!");
}else if(l instanceof Boolean){
System.out.println("You picked a Boolean!");
}
}
}
出力:

参考文献
ダイアログを作る]。
https://docs.oracle.com/javase/8/docs/api/javax/swing/JOptionPane.html
[Class
JOptionペイン – Java 8 API]。
https://docs.oracle.com/javase/7/docs/api/constant-values.html#javax.security.auth.callback.ConfirmationCallback.CANCEL
[Constant
フィールド値]
リンク://タグ/ダイアログ/[ダイアログ]リンク://タグ/showinputdialog/[showInputDialog]リンク://タグ/スイング/[スイング]