独自にダイアログボックスのクラスを定義しなくても、ダイアログボックスの表示位置や、ボタンの配置は自動なので、プログラムがシンプルに書けます。
【1】sample209 フォルダをフォルダごとコピーして、sample210 フォルダを作ります。

【2】今回は以下のようなファイル構成になりますので、コピーした余計なものは削除してください。

【3】PrefTest.java を以下のように変更します。
*「\」はWindowsではエンマークのことです。
保存先 C:\java\sample210
ファイル名 PrefTest.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class PrefFrame extends JFrame {
Container cp;
public PrefFrame(String title) {
//フレームのタイトル
setTitle(title);
//コンテンツペイン取得
cp = getContentPane();
//ウィンドウを閉じる時
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
//ダイアログボックスの表示
int ret = JOptionPane.showConfirmDialog (cp, "プログラムを終了しますか?", "確認", JOptionPane.YES_NO_OPTION);
if(ret == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
});
}
}
public class PrefTest {
public static void main(String args[]) {
PrefFrame frm = new PrefFrame("都道府県マスター");
frm.setLocation(300, 200);
frm.setSize(250, 350);
frm.cp.setBackground(Color.LIGHT_GRAY);
frm.setVisible(true);
}
}
【4】コマンドプロンプトを起動して、カレントディレクトリを sample210 に切り替えます。

【5】javac PrefTest.java と入力し、コンパイルします。

【6】java PrefTest と入力し、プログラムを実行します。

【7】Swing のウィンドウが表示されました。

【8】ウィンドウを閉じてみましょう。

【9】確認のダイアログボックスが表示されました。

【10】先に「いいえ」ボタンをクリックします。

【11】ダイアログボックスは消え、何も起こりません。

【12】もう一度ダイアログボックスを表示し、今度は「はい」ボタンをクリックします。

【13】ウィンドウが閉じ、コマンドプロンプトは次の命令を入力できる状態になりました。

【解説】
(1)Swingでもイベント処理はAWTのクラスを使うため、以下のパッケージをインポートする必要があります。
import java.awt.event.*;
*Swingにもイベント処理に関わるクラスがありますが、それはSwing独自のイベント分を補うもので、やはりメインはAWTです。
(2)コンテンツペインを取得するため、参照型変数を用意しています。この変数はPrefFrame クラスのメソッドや、PrefTestクラスからも参照されるため、フィールド変数として宣言しています。
Container cp;
(3)コンテンツペインは PrefFrame クラスのコンストラクタで取得しています。Swingではメニューバー以外のコンポーネントはコンテンツペイン上に配置する必要があります。
cp = getContentPane();
(4)無名内部クラスでも閉じる時の処理を書いているので、以下の文は必要なさそうですが、
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
この処理がないとダイアログボックスで「いいえ」ボタンをクリックした時に、コマンドプロンプトに正常に戻れません。コマンドプロンプトが入力を受け付けなくなります。
ハングアップした状態

ハングアップした場合は「Ctrlキー」+「Cキー」で正常に戻ります。

(5)JOptionPane クラスの showConfirmDialog() メソッドは static なので、インスタンスを生成しなくても使えます。 クラス名.メソッド名()
またユーザーの選択により戻り値を返しますので、int型の変数 ret で受け取っています。
引数に this ではなくコンテンツペインの cp を指定することで、ダイアログボックスがフレームの中央に自動で表示されます。(フレームを移動しても自動で中央になる)
int ret = JOptionPane.showConfirmDialog (cp, "プログラムを終了しますか?", "確認", JOptionPane.YES_NO_OPTION);
(6)もし「はい」がクリックされていた場合は、システムを終了しています。
if(ret == JOptionPane.YES_OPTION) {
System.exit(0);
}
(7)PrefTest クラス
今回と前回の書き方をくらべてみてください。今回コンテンツペインはPrefFrame クラスのコンストラクタで取得していますので、インスタンスを生成したあとは、「インスタンス名.cp」で参照できます。
・今回
frm.cp.setBackground(Color.LIGHT_GRAY);
・前回
frm.getContentPane().setBackground(Color.LIGHT_GRAY);
sample208の時と比べると、ダイアログボックスの表示に関する部分が、だいぶ簡単になったことがわかると思います。