こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

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なので値を受け取るということはしません。