processing

processingで選択ダイアログを表示する

目次 

  • はじめに
  • 実装
    1. 概要
    2. レイアウト
    3. JOptionPane.showConfirmDialog();を扱う
  • おわりに

はじめに

 processingでexit();処理を行う前に選択ダイアログで確認をしようとした際に、方法がわからずつまずきました…
 (こういうやつですよね↓)

dialog.png

 調べても簡潔に説明しているページがなかったため、超初心者の自分用にまとめました。今回はJavaのSwingのJOptionPaneクラスを使用しました。
 processingのバージョンは3.3.4です。

実装

dialog.pde
import java.awt.*;
import javax.swing.*;

JPanel panel = new JPanel();    //パネルを作成
BoxLayout layout = new BoxLayout( panel, BoxLayout.Y_AXIS );    //メッセージのレイアウトを決定

void setup(){
  panel.setLayout(layout);    //panelにlayoutを適用
  panel.add( new JLabel( "終わりますか?" ) );    //メッセージ内容を文字列のコンポーネントとしてパネルに追加
}

void draw(){
  int r = JOptionPane.showConfirmDialog( 
    null,    //親フレームの指定
    panel,    //パネルの指定
    "hogehoge",    //タイトルバーに表示する内容
    JOptionPane.YES_NO_OPTION,    //オプションタイプをYES,NOにする
    JOptionPane.INFORMATION_MESSAGE   //メッセージタイプをInformationにする
  );

  if ( r == 0 ) {    
    //YESが選択された場合の処理
  } else if ( r == 1 ) {
    //NOが選択された場合の処理
  }
}

上記のコードで以下のようなダイアログメッセージが表示されます。

dialog2.png

1. 概要

- JPanelクラスでパネルを作成

- BoxLayoutクラスでパネルにレイアウトを指定

 JPanelクラスのsetLayout();メソッドを使用して指定します。void setup()の中に書く必要があります。

- JLabelクラスでパネルに文字列コンポーネントを追加

 JPanelクラスのadd();メソッドでパネルにコンポーネントを追加します。今回はメッセージなので文字列です。void setup() の中に書く必要があります。

- JOptionPaneクラスのshowConfirmDialog();メソッドを用いてオプションタイプとメッセージタイプを指定

 後に詳しく書きます。

2. レイアウト

 BoxLayoutクラスがこれに当たります。上記のコードで使用しているパラメータのBoxLayout.Y_AXISでは、コンポーネントを上から下に配置します。
 BoxLayoutクラスについての詳しい説明は以下の記事を参考にされると良いと思います。

BoxLayoutクラス - Swing - JavaDrive
https://www.javadrive.jp/tutorial/boxlayout/

3. JOptionPane.showConfirmDialog();を扱う

 JOptionPane.showConfirmDialog(引数1,引数2,引数3,引数4,引数5);
 各引数、返り値について触れます。

引数1

 ダイアログを表示するための親フレームを指定します。上記のコードでは、選択ダイアログのみを表示するので、親フレームはなく、nullをいれました。

引数2

 ここでパネルを指定します。これまでに.setLayout();でレイアウトを決定、.add();で文字列のコンポーネントを追加させたパネルを指定します。上記のコードではpanelが該当します。

引数3

 ダイアログのタイトルを指定します。String型の値を用います。

引数4

 オプションタイプ(YESorNO、はいor取消といった選択肢のボタン)の指定をします。上記のコードではJOptionPane.YES_NO_OPTIONというパラメータで、選択肢がYESとNOになっています。
 パラメータと表示されるボタンの関係は以下の通りです。

パラメータ 表示されるボタン
JOptionPane.YES_NO_OPTION YES/NO
JOptionPane.YES_NO_CANCEL_OPTION YES/NO/取消
JOptionPane.OK_CANCEL_OPTION OK/取消

引数5

 ダイアログのメッセージタイプ(選択ダイアログの中にある「警告」や「情報」などの種類)を指定します。上記のコードに書かれているパラメータJOptionPane.INFORMATION_MESSAGEは、この種類を「情報」に指定します。
 パラメータとメッセージタイプの関係は以下の表の通りです。

パラメータ メッセージタイプ
JOptionPane.ERROR_MESSAGE エラーメッセージ
JOptionPane.INFORMATION_MESSAGE 情報メッセージ
JOptionPane.WARNING_MESSAGE 警告メッセージ
JOptionPane.QUESTION_MESSAGE 質問メッセージ
JOptionPane.PLAIN_MESSAGE アイコン非表示

返り値

 返り値はint型の値として返されます。上記のコードではrに格納されます。
 選択ボタンと返り値の関係は以下の表の通りです。

選択したボタン 返り値
OK 0
YES 0
NO 1
取消 2

 以下は私が参考にさせていただいたサイトです。詳細についてはこのサイト参照していただけると良いと思います。

メッセージタイプを指定して選択ダイアログを表示する - JOptionPaneクラス - Swing - JavaDrive
https://www.javadrive.jp/tutorial/joptionpane/index7.html

おわりに

 いかがでしたでしょうか?
 選択ダイアログを表示するには、毎回JOptionPane.showConfirmDialog();を実行し、int型変数に値を代入し直さなければいけません。当然ですが、上記のコードのようにvoid draw()直下に書いてしまうと、draw()が実行される度にダイアログが表示されてしまいプログラムが止まってしまうため、書く場所には気を付けます。

 はじめて記事を書いたため、至らない点があるとは思いますが、その際はご指摘いただけると嬉しいです。ありがとうございました。