SwingのJOptionPane
こんにちは。「Javaを復習する初心者」です。
今回は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(350, 250);
init();
setVisible(true);
}
private void init() {
// 設置処理
}
}
ボタンを表示するダイアログ
JOptionPane#createDialog()
JOptionPaneはユーザーの入力を求めたり、情報を表示するためのクラスです。基本的にダイアログ表示で使われると思います。
次のサンプルはコンストラクタJOptionPane()を使った例です。
private void init() {
// 設置処理
setLayout(new FlowLayout());
JOptionPane optionPane = new JOptionPane();
JDialog dialog = optionPane.createDialog(null, "test ダイアログ");
JButton button = new JButton("表示");
add(button);
button.addActionListener(event -> {
dialog.setVisible(true);
});
}
上記サンプルでは、「表示」ボタンを押下するとダイアログが表示されるという動作をします。最初にJOptionPane#createDialogを使ってます。このメソッドはJDialogオブジェクトを返却します。第一引数で親フレームを指定し、第二引数でタイトルバーに表示するテキストを指定します。次に、JButtonオブジェクトを生成し、押下時にダイアログを表示するようにしています。
タイトルバーに「test ダイアログ」が表示されています。表示されるメッセージ「JOptionPane message」はコンストラクタJOptionPane()が初期設定で決めているものです。
コンストラクタJOptionPane(Object message)
引数なしのコンストラクタでは表示されるメッセージが決まってました。このメッセージを変更するにはコンストラクタJOptionPane(Object message)を使います。例えば以下のように使います。
JOptionPane optionPane = new JOptionPane("test メッセージ");
引数がObjectなのでJPanelを指定することもできます。例えば以下のように使うこともできます。
JPanel panel = new JPanel();
panel.add(new JLabel("パネルテスト"));
panel.add(new JTextField(20));
JOptionPane optionPane = new JOptionPane(panel);
JOptionPane#setMessage()
コンストラクタでメッセージを指定しなくても、後で変更できます。void setMessage(Object newMessage)メソッドが用意されてます。例えば、以下のように使います。
JOptionPane optionPane = new JOptionPane();
optionPane.setMessage("test");
メッセージが「test」という文字列に設定されます。
JOptionPane#setMessageType()
setMessageType()メソッドではメッセージのスタイルを設定できます。引数はint型で、以下のstaticフィールドを指定します。
ERROR_MESSAGE | エラー・メッセージ |
INFORMATION_MESSAGE | 情報メッセージ |
WARNING_MESSAGE | 警告メッセージ |
QUESTION_MESSAGE | 質問 |
PLAIN_MESSAGE | アイコンを使用しない |
以下のように使います。
private void init() {
// 設置処理
setLayout(new FlowLayout());
JOptionPane optionPane = new JOptionPane();
optionPane.setMessage("test");
optionPane.setMessageType(JOptionPane.PLAIN_MESSAGE);
JDialog dialog = optionPane.createDialog(null, "test ダイアログ");
JButton button = new JButton("表示");
add(button);
button.addActionListener(event -> {
dialog.setVisible(true);
});
}
以下のキャプチャは上記のリストの値を順番に指定して表示した結果です。
JOptionPane#setOptionType()
setOptionType()メソッドではオプションを設定できます。表示するボタンが変わるようです。引数はint型で、以下のstaticフィールドを指定します。
DEFAULT_OPTION | 「OK」 |
YES_NO_OPTION | 「はい」、「いいえ」 |
YES_NO_CANCEL_OPTION | 「はい」、「いいえ」、「取消」 |
OK_CANCEL_OPTION | 「OK」、「取消」 |
以下のように使います。
private void init() {
// 設置処理
setLayout(new FlowLayout());
JOptionPane optionPane = new JOptionPane();
optionPane.setMessage("test");
optionPane.setOptionType(JOptionPane.DEFAULT_OPTION);;
JDialog dialog = optionPane.createDialog(null, "test ダイアログ");
JButton button = new JButton("表示");
add(button);
button.addActionListener(event -> {
dialog.setVisible(true);
});
}
以下のキャプチャは上記のリストの値を順番に指定して表示した結果です。
押下されたボタン
どのボタンが押下されたのかはObject getValue()メソッドで取得できます。押下されたボタンに応じて、以下のstatic フィールドの値が返却されるようです。
- YES_OPTION
- NO_OPTION
- CANCEL_OPTION
- OK_OPTION
- CLOSED_OPTION
例えば、以下のように使います。
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("表示");
add(button);
button.addActionListener(event -> {
int result = JOptionPane.showConfirmDialog(null, "testメッセージ");
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("表示");
add(button);
button.addActionListener(event -> {
String result = JOptionPane.showInputDialog(null, "testメッセージ");
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("表示");
add(button);
button.addActionListener(event -> {
JOptionPane.showMessageDialog(null, "testメッセージ");
});
}
JOptionPane#showMessageDialog()の戻り値の定義はvoidなので値を受け取るということはしません。