倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

JOptionPane の使い方が悲しいくらい分かりにくい! (1) : Message Dialog とメッセージ・タイプ

Swing の javax.swing.JOptionPane の使い方が悲しいくらいに分かりにくいので、ちょっと API を整理したりサンプルコードをあれこれ試したりしてみます。

JOptionPane で扱えるダイアログ


JOptionPane で使えるダイアログには以下のような種類があります:

  • Message Dialog
  • Confirm Dialog
  • Input Dialog
  • Option Dialog

最後の「Option Dialog」はその他の3種類のダイアログをまとめたようなものです。 また、それぞれに対して "Internal" な同様のダイアログもあります。 これらは使い方が概ね同じなので省略。

今回と次回以降でそれぞれのダイアログをもう少し詳しく見ていきます。 今回は「Message Dialog」。

Message Dialog


Message Dialog はメッセージとアイコンと「了解」ボタンのみがあるダイアログです(画像はサンプルの箇所参照)。 これは JOptionPane の static メソッド showMessageDialog() を使用して表示します。 このメソッドには以下のようなシグニチャがあります:

static void showMessageDialog(Component parent, Object message) 
static void showMessageDialog(Component parent, Object message, String title, int messageType) 
static void showMessageDialog(Component parent, Object message, String title, int messageType, Icon icon) 

引数を整理するとこんな感じ:

引数 必須 デフォルト値 説明
parent java.awt.Component Yes - 親となる GUI コンポーネント
message Object Yes - メッセージ
title String No "メッセージ" ダイアログのタイトル
messageType int No JOptionPane.
INFORMATION_MESSAGE
メッセージのタイプ(次節参照)
icon java.awt.Icon No アイコン

メッセージ・タイプ


メッセージ・タイプは JOptionPane に定義されている定数 (int) で指定します。 使用できる定数は以下の通り:

  • ERROR_MESSAGE
  • INFORMATION_MESSAGE
  • WARNING_MESSAGE
  • QUESTION_MESSAGE
  • PLAIN_MESSAGE

これらを指定すると、ダイアログに表示されるアイコンが変わります(たぶんそれだけ)。

サンプルコード


では、サンプルコードと表示されるダイアログを見ていきましょう。

単純なメッセージダイアログ

まずは一番単純なダイアログ。

import javax.swing.JFrame;
import javax.swing.JOptionPane;

JFrame parent = ...;

JOptionPane.showMessageDialog(parent, "Here is an message!");


Look & Feel を変えてますが、あんまり気にせずに。 ちなみに Groovy で SwingBuilder を使って同じダイアログを表示させるコードは

import groovy.swing.SwingBuilder
import static javax.swing.JOptionPane.*

JFrame parent = ...

def pane = new SwingBuilder().optionPane(
                            message:'Here is a message!', 
                            messageType:INFORMATION_MESSAGE)
pane.createDialog(parent, 'メッセージ').visible = true

SwingBuilder ではメッセージ・タイプを指定しないとアイコンは表示されないようです。

タイトルとメッセージ・タイプを指定する

さてもう少しだけコードを足して、タイトルとアイコンを変えてみましょう。 アイコンはメッセージ・タイプを指定して変更できます。 コード自体は大して難しくなく、どのメッセージ・タイプがどのアイコンを表示させるかだけを把握しておけばよいかと:

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import static javax.swing.JOptionPane.*;

JFrame parent = ...;

JOptionPane.showMessageDialog(parent, "Here is an error message!",
    "Error Message", ERROR_MESSAGE);

JOptionPane.showMessageDialog(parent, "Here is an information message.",
    "Information Message", INFORMATION_MESSAGE);

JOptionPane.showMessageDialog(parent, "Here is a warning message!?",
    "Warning Message", WARNING_MESSAGE);

JOptionPane.showMessageDialog(parent, "Is here a question message?",
    "Question Message", QUESTION_MESSAGE);

JOptionPane.showMessageDialog(parent, "'Here is a plain message.",
    "Plain Message", PLAIN_MESSAGE);


Groovy + SwingBuilder で、例えばエラーメッセージのダイアログを表示させるには

import groovy.swing.SwingBuilder
import static javax.swing.JOptionPane.*

JFrame parent = ...

def pane = new SwingBuilder().optionPane(
                        message:'Here is an error message!',
                        messageType:ERROR_MESSAGE)
def dialog = pane.createDialog(parent, 'Error Message')
dialog.visible = true

「単純なメッセージダイアログ」の場合と同じですね。

Java Swing Hacks ―今日から使える驚きのGUIプログラミング集

Java Swing Hacks ―今日から使える驚きのGUIプログラミング集