こんにちは。
今回はSwingのJOptionPaneを使ってみました。JOptionPaneはダイアログ表示で使われる場合が多いと思います。JFrameにJButtonを設置し、JOptionPaneを表示するサンプルを色々試しました。
以下のプログラムを雛形として使います。
ソース
import javax.swing.JFrame;
public class Test extends JFrame {
public static void main(String[] args) {
new Test();
}
public Test() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(150, 100);
init();
setVisible(true);
}
private void init() {
// 設置処理
}
}
目次
ボタンを表示するダイアログ
JOptionPane#createDialog()
JOptionPaneはユーザーの入力を求めたり、情報を表示するためのクラスです。基本的にダイアログ表示で使われると思います。
次のサンプルはコンストラクタJOptionPane()を使った例です。
ソース
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Test2 extends JFrame {
public static void main(String[] args) {
new Test2();
}
public Test2() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(150, 100);
init();
setVisible(true);
}
private void init() {
setLayout(new FlowLayout());
JOptionPane optionPane = new JOptionPane();
JDialog dialog = optionPane.createDialog(null, "My Test Dialog Title");
JButton button = new JButton("Open Dialog");
add(button);
button.addActionListener(event -> {
dialog.setVisible(true);
});
}
}
上記サンプルでは、「Open Dialog」ボタンを押下するとダイアログが表示されるという動作をします。
最初にJOptionPane#createDialogを使ってます。このメソッドはJDialogオブジェクトを返却します。第一引数で親フレームを指定し、第二引数でタイトルバーに表示するテキストを指定します。次に、JButtonオブジェクトを生成し、押下時にダイアログを表示するようにしています。
タイトルバーに「My Test Dialog Title」という文字列が表示されています。表示されるメッセージ「JOptionPane message」はコンストラクタJOptionPane()が初期設定で決めているものです。
コンストラクタJOptionPane(Object message)
引数なしのコンストラクタでは表示されるメッセージが決まってました。このメッセージを変更するにはコンストラクタJOptionPane(Object message)を使います。例えば以下のように使います。
ソース
JOptionPane optionPane = new JOptionPane("My Test Message");
引数がObjectなのでJPanelを指定することもできます。例えば以下のように使うこともできます。
ソース
JPanel panel = new JPanel();
panel.add(new JLabel("My Panel Test Label"));
panel.add(new JTextField(20));
JOptionPane optionPane = new JOptionPane(panel);
上記では最初に、JPanelオブジェクトを生成しています。JLabelオブジェクトとJTextFieldオブジェクトを生成し、JPanelオブジェクトに追加しています。
コンストラクタJOptionPane()の引数にJPanelオブジェクトを指定することで、オプションのウィンドウにJPanelオブジェクトを表示することができます。
JOptionPane#setMessage()
コンストラクタでメッセージを指定しなくても、後で変更できます。void setMessage(Object newMessage)メソッドが用意されてます。例えば、以下のように使います。
ソース
JOptionPane optionPane = new JOptionPane();
optionPane.setMessage("My Test Message 2");
メッセージが「My Test Message 2」という文字列に設定されます。
JOptionPane#setMessageType()
setMessageType()メソッドではメッセージのスタイルを設定できます。引数はint型で、以下のstaticフィールドを指定します。
フィールド | 内容 |
---|---|
ERROR_MESSAGE | エラー・メッセージ |
INFORMATION_MESSAGE | 情報メッセージ |
WARNING_MESSAGE | 警告メッセージ |
QUESTION_MESSAGE | 質問 |
PLAIN_MESSAGE | アイコンを使用しない |
以下のように使います。
ソース
JOptionPane optionPane = new JOptionPane();
optionPane.setMessage("My Test Message");
optionPane.setMessageType(JOptionPane.PLAIN_MESSAGE);
以下のキャプチャはsetMessageType()メソッドの引数に、上記のリストの値を指定した結果です。
- ERROR_MESSAGE
- INFORMATION_MESSAGE
- WARNING_MESSAGE
- QUESTION_MESSAGE
- PLAIN_MESSAGE
JOptionPane#setOptionType()
setOptionType()メソッドではオプションを設定できます。表示するボタンが変わるようです。引数はint型で、以下のstaticフィールドを指定します。
フィールド | 内容 |
---|---|
DEFAULT_OPTION | 「OK」 |
YES_NO_OPTION | 「はい」、「いいえ」 |
YES_NO_CANCEL_OPTION | 「はい」、「いいえ」、「取消」 |
OK_CANCEL_OPTION | 「OK」、「取消」 |
以下のように使います。
ソース
JOptionPane optionPane = new JOptionPane();
optionPane.setMessage("My Test Message");
optionPane.setOptionType(JOptionPane.DEFAULT_OPTION);
以下のキャプチャは、setOptionType()メソッドの引数に上記のリストの値を指定した結果です。
- DEFAULT_OPTION
- YES_NO_OPTION
- YES_NO_CANCEL_OPTION
- OK_CANCEL_OPTION
押下されたボタン
どのボタンが押下されたのかはObject getValue()メソッドで取得できます。押下されたボタンに応じて、以下のstatic フィールドの値が返却されるようです。
- YES_OPTION
- NO_OPTION
- CANCEL_OPTION
- OK_OPTION
- CLOSED_OPTION
例えば、以下のように使います。
ソース
private void init() {
setLayout(new FlowLayout());
JOptionPane optionPane = new JOptionPane();
optionPane.setMessage("My Test Message");
optionPane.setOptionType(JOptionPane.OK_CANCEL_OPTION);
JDialog dialog = optionPane.createDialog(null, "My Test Dialog Title");
JButton button = new JButton("Open Dialog");
add(button);
button.addActionListener(event -> {
dialog.setVisible(true);
if (optionPane.getValue().equals(JOptionPane.YES_OPTION)) {
System.out.println("Yes.");
} else if (optionPane.getValue().equals(JOptionPane.CANCEL_OPTION)) {
System.out.println("Cancel.");
}
});
}
「OK」ボタンを押下すると「Yes.」と出力され、「取消」ボタンを押下すると「Cancel.」が出力されます。
showXxxDialogメソッド
標準的なダイアログを出力するためのstaticメソッドが用意されています。異なる引数の同名のメソッドの区別を省略した場合、以下の4つがあります。
- showConfirmDialog
- showInputDialog
- showMessageDialog
- showOptionDialog
このうちshowOptionDialogは最初の3つを合わせたものです。今回は、最初の3つを使ってみます。
showConfirmDialog
いくつかのメソッドがオーバーロードされています。今回はshowConfirmDialog(Component parentComponent, Object message)を使ってみました。
ソース
private void init() {
setLayout(new FlowLayout());
JButton button = new JButton("Open Dialog");
add(button);
button.addActionListener(event -> {
int result = JOptionPane.showConfirmDialog(null, "My Test Dialog Title");
if (result == JOptionPane.YES_OPTION) {
System.out.println("Yes.");
} else if (result == JOptionPane.NO_OPTION) {
System.out.println("No.");
} else if (result == JOptionPane.CANCEL_OPTION) {
System.out.println("Cancel.");
} else if (result == JOptionPane.CLOSED_OPTION ) {
System.out.println("Closed.");
}
});
}
JOptionPane#showConfirmDialogの返却値がint型であり、上記のように押下されたボタンが判別できます。
showInputDialog
いくつかのメソッドがオーバーロードされていますが、今回はshowInputDialog(Component parentComponent, Object message)を使ってみました。
ソース
private void init() {
setLayout(new FlowLayout());
JButton button = new JButton("Open Dialog");
add(button);
button.addActionListener(event -> {
String result = JOptionPane.showInputDialog(null, "My Test Message");
System.out.println(result);
});
}
JOptionPane#showInputDialog()メソッドはString型でユーザーの入力値を返却します。「OK」ボタン押下時は空文字が返却され、「取消」ボタン押下時はnullが返却されます。
showMessageDialog
いくつかのメソッドがオーバーロードされていますが、ここではshowMessageDialog(Component parentComponent, Object message)を使いました。
ソース
private void init() {
setLayout(new FlowLayout());
JButton button = new JButton("Open Dialog");
add(button);
button.addActionListener(event -> {
JOptionPane.showMessageDialog(null, "My Test Message");
});
}
JOptionPane#showMessageDialog()の戻り値の定義はvoidなので値を受け取るということはしません。
以上、参考になれば幸いです。