OSDN Git Service

showing dialog to task-view GUI.
authorOlyutorskii <olyutorskii@users.osdn.me>
Wed, 29 Apr 2020 06:17:22 +0000 (15:17 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Wed, 29 Apr 2020 06:17:22 +0000 (15:17 +0900)
src/main/java/jp/sfjp/jindolf/Controller.java
src/main/java/jp/sfjp/jindolf/log/LogFrame.java
src/main/java/jp/sfjp/jindolf/summary/DaySummary.java
src/main/java/jp/sfjp/jindolf/summary/VillageDigest.java
src/main/java/jp/sfjp/jindolf/view/FilterPanel.java
src/main/java/jp/sfjp/jindolf/view/FindPanel.java
src/main/java/jp/sfjp/jindolf/view/OptionPanel.java
src/main/java/jp/sfjp/jindolf/view/WindowManager.java

index 7b874a1..a26a35b 100644 (file)
@@ -456,8 +456,7 @@ public class Controller
                                            JOptionPane.DEFAULT_OPTION,
                                            GUIUtils.getLogoIcon());
 
-        JDialog dialog = pane.createDialog(getTopFrame(),
-                                           VerInfo.TITLE + "について");
+        JDialog dialog = pane.createDialog(VerInfo.TITLE + "について");
 
         dialog.pack();
         dialog.setVisible(true);
@@ -760,7 +759,7 @@ public class Controller
             JOptionPane pane = new JOptionPane(message,
                                                JOptionPane.WARNING_MESSAGE,
                                                JOptionPane.DEFAULT_OPTION );
-            JDialog dialog = pane.createDialog(getTopFrame(), title);
+            JDialog dialog = pane.createDialog(title);
             dialog.pack();
             dialog.setVisible(true);
             dialog.dispose();
@@ -1364,7 +1363,7 @@ public class Controller
                                            JOptionPane.DEFAULT_OPTION );
 
         String title = VerInfo.getFrameTitle("通信異常発生");
-        JDialog dialog = pane.createDialog(getTopFrame(), title);
+        JDialog dialog = pane.createDialog(title);
 
         dialog.pack();
         dialog.setVisible(true);
index b69a14e..666a550 100644 (file)
@@ -12,7 +12,7 @@ import io.github.olyutorskii.quetexj.MaxTracker;
 import io.github.olyutorskii.quetexj.MvcFacade;
 import io.github.olyutorskii.quetexj.SwingLogHandler;
 import java.awt.Container;
-import java.awt.Frame;
+import java.awt.Dialog;
 import java.util.logging.Handler;
 import javax.swing.Action;
 import javax.swing.BorderFactory;
@@ -57,11 +57,10 @@ public final class LogFrame extends JDialog {
 
     /**
      * コンストラクタ。
-     *
-     * @param owner フレームオーナー
      */
-    public LogFrame(Frame owner){
-        super(owner);
+    public LogFrame(){
+        super((Dialog)null);
+        // We need unowned dialog
 
         this.facade = new MvcFacade();
 
index 35155b4..286249c 100644 (file)
@@ -10,8 +10,8 @@ package jp.sfjp.jindolf.summary;
 import java.awt.Color;
 import java.awt.Component;
 import java.awt.Container;
+import java.awt.Dialog;
 import java.awt.Dimension;
-import java.awt.Frame;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.Image;
@@ -57,7 +57,7 @@ import jp.sourceforge.jindolf.corelib.TalkType;
  * その日ごとの集計。
  */
 @SuppressWarnings("serial")
-public class DaySummary extends JDialog
+public final class DaySummary extends JDialog
         implements WindowListener, ActionListener, ItemListener{
 
     private static final NumberFormat AVERAGE_FORM;
@@ -92,11 +92,13 @@ public class DaySummary extends JDialog
 
     /**
      * コンストラクタ。
-     * 集計結果を表示するモーダルダイアログを生成する。
-     * @param owner オーナー
+     *
+     * <p>集計結果を表示するモーダルダイアログを生成する。
      */
-    public DaySummary(Frame owner){
-        super(owner);
+    public DaySummary(){
+        super((Dialog)null);
+        // We need unowned dialog
+
         setModal(true);
 
         GUIUtils.modifyWindowAttributes(this, true, false, true);
@@ -154,6 +156,7 @@ public class DaySummary extends JDialog
 
     /**
      * 初期のデータモデルを生成する。
+     *
      * @return データモデル
      */
     private static DefaultTableModel createInitModel(){
@@ -180,6 +183,7 @@ public class DaySummary extends JDialog
 
     /**
      * 行を追加する。
+     *
      * @param avatar アバター
      * @param talkCount 発言回数
      * @param totalChars 発言文字総数
@@ -256,6 +260,7 @@ public class DaySummary extends JDialog
 
     /**
      * 与えられたPeriodで集計を更新する。
+     *
      * @param newPeriod 日
      */
     public void summaryPeriod(Period newPeriod){
@@ -322,6 +327,7 @@ public class DaySummary extends JDialog
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -331,6 +337,7 @@ public class DaySummary extends JDialog
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -340,6 +347,7 @@ public class DaySummary extends JDialog
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -349,6 +357,7 @@ public class DaySummary extends JDialog
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -358,6 +367,7 @@ public class DaySummary extends JDialog
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -367,7 +377,9 @@ public class DaySummary extends JDialog
 
     /**
      * {@inheritDoc}
-     * ダイアログのクローズボタン押下処理を行う。
+     *
+     * <p>ダイアログのクローズボタン押下処理を行う。
+     *
      * @param event ウィンドウ変化イベント {@inheritDoc}
      */
     @Override
@@ -378,6 +390,7 @@ public class DaySummary extends JDialog
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -387,7 +400,9 @@ public class DaySummary extends JDialog
 
     /**
      * {@inheritDoc}
-     * クローズボタン押下処理。
+     *
+     * <p>クローズボタン押下処理。
+     *
      * @param event イベント {@inheritDoc}
      */
     @Override
@@ -399,7 +414,9 @@ public class DaySummary extends JDialog
 
     /**
      * {@inheritDoc}
-     * コンボボックス操作処理。
+     *
+     * <p>コンボボックス操作処理。
+     *
      * @param event イベント {@inheritDoc}
      */
     @Override
@@ -443,7 +460,9 @@ public class DaySummary extends JDialog
 
         /**
          * {@inheritDoc}
-         * セルに{@link Avatar}がきたら顔アイコンと名前を表示する。
+         *
+         * <p>セルに{@link Avatar}がきたら顔アイコンと名前を表示する。
+         *
          * @param value {@inheritDoc}
          */
         @Override
@@ -484,8 +503,10 @@ public class DaySummary extends JDialog
         }
 
         /**
-         *  {@inheritDoc}
-         * 統計種別によってセル色を変える。
+         * {@inheritDoc}
+         *
+         * <p>統計種別によってセル色を変える。
+         *
          * @param table {@inheritDoc}
          * @param value {@inheritDoc}
          * @param isSelected {@inheritDoc}
@@ -530,6 +551,7 @@ public class DaySummary extends JDialog
 
             return result;
         }
+
     }
 
 }
index 3c58acc..bc8f05e 100644 (file)
@@ -8,9 +8,9 @@
 package jp.sfjp.jindolf.summary;
 
 import java.awt.Container;
+import java.awt.Dialog;
 import java.awt.Dimension;
 import java.awt.EventQueue;
-import java.awt.Frame;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.Image;
@@ -60,7 +60,7 @@ import jp.sourceforge.jindolf.corelib.Team;
  * 決着のついた村のダイジェストを表示する。
  */
 @SuppressWarnings("serial")
-public class VillageDigest
+public final class VillageDigest
         extends JDialog
         implements ActionListener,
                    ItemListener {
@@ -109,10 +109,12 @@ public class VillageDigest
 
     /**
      * コンストラクタ。
-     * @param owner 親フレーム
      */
-    public VillageDigest(Frame owner){
-        super(owner);
+    @SuppressWarnings("LeakingThisInConstructor")
+    public VillageDigest(){
+        super((Dialog)null);
+        // We need unowned dialog
+
         setModal(true);
 
         GUIUtils.modifyWindowAttributes(this, true, false, true);
@@ -177,6 +179,7 @@ public class VillageDigest
 
     /**
      * キャプション付き項目をコンテナに追加。
+     *
      * @param container コンテナ
      * @param caption 項目キャプション名
      * @param delimiter デリミタ文字
@@ -222,6 +225,7 @@ public class VillageDigest
 
     /**
      * キャプション付き項目をコンテナに追加。
+     *
      * @param container コンテナ
      * @param caption 項目キャプション名
      * @param item 項目アイテム
@@ -235,6 +239,7 @@ public class VillageDigest
 
     /**
      * レイアウトの最後に詰め物をする。
+     *
      * @param container コンテナ
      */
     private static void addFatPad(Container container){
@@ -257,6 +262,7 @@ public class VillageDigest
 
     /**
      * GridBagLayoutでレイアウトする空コンポーネントを生成する。
+     *
      * @return 空コンポーネント
      */
     private static JComponent createGridBagComponent(){
@@ -268,6 +274,7 @@ public class VillageDigest
 
     /**
      * 村サマリ画面の生成。
+     *
      * @return 村サマリ画面
      */
     private JComponent buildSummaryPanel(){
@@ -281,6 +288,7 @@ public class VillageDigest
 
     /**
      * プレイヤーサマリ画面の生成。
+     *
      * @return プレイヤーサマリ画面
      */
     private JComponent buildPlayerPanel(){
@@ -323,6 +331,7 @@ public class VillageDigest
 
     /**
      * キャスト表生成画面を生成する。
+     *
      * @return キャスト表生成画面
      */
     private JComponent buildCastPanel(){
@@ -354,6 +363,7 @@ public class VillageDigest
 
     /**
      * 投票Box生成画面を生成する。
+     *
      * @return 投票Box生成画面
      */
     private JComponent buildVotePanel(){
@@ -376,6 +386,7 @@ public class VillageDigest
 
     /**
      * 村詳細Wiki生成画面を生成する。
+     *
      * @return 村詳細Wiki生成画面
      */
     private JComponent buildVillageWikiPanel(){
@@ -398,6 +409,7 @@ public class VillageDigest
 
     /**
      * Wikiテキスト領域GUIの生成。
+     *
      * @return Wikiテキスト領域GUI
      */
     private JComponent buildClipText(){
@@ -439,6 +451,7 @@ public class VillageDigest
 
     /**
      * テンプレート生成画面を生成する。
+     *
      * @return テンプレート生成画面
      */
     private JComponent buildClipboardPanel(){
@@ -480,6 +493,7 @@ public class VillageDigest
 
     /**
      * 画面レイアウトを行う。
+     *
      * @param container コンテナ
      */
     private void design(Container container){
@@ -533,6 +547,7 @@ public class VillageDigest
 
     /**
      * 村を設定する。
+     *
      * @param village 村
      */
     public void setVillage(Village village){
@@ -646,6 +661,7 @@ public class VillageDigest
 
     /**
      * アクションイベントの振り分け。
+     *
      * @param event アクションイベント
      */
     @Override
@@ -713,7 +729,9 @@ public class VillageDigest
 
     /**
      * Wikiテキストをテキストボックスに出力する。
-     * スクロール位置は一番上に。
+     *
+     * <p>スクロール位置は一番上に。
+     *
      * @param wikiText Wikiテキスト
      */
     private void putWikiText(CharSequence wikiText){
@@ -741,6 +759,7 @@ public class VillageDigest
 
     /**
      * プレイヤーの選択操作。
+     *
      * @param avatar 選択されたAvatar
      */
     private void selectPlayer(Avatar avatar){
@@ -805,6 +824,7 @@ public class VillageDigest
 
     /**
      * 顔アイコンセットの選択操作。
+     *
      * @param iconSet 顔アイコンセット
      */
     private void selectIconSet(FaceIconSet iconSet){
@@ -817,6 +837,7 @@ public class VillageDigest
 
     /**
      * コンボボックス操作の受信。
+     *
      * @param event コンボボックス操作イベント
      */
     @Override
index ee09578..a15703a 100644 (file)
@@ -8,7 +8,7 @@
 package jp.sfjp.jindolf.view;
 
 import java.awt.Container;
-import java.awt.Frame;
+import java.awt.Dialog;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.Insets;
@@ -43,7 +43,7 @@ import jp.sourceforge.jindolf.corelib.TalkType;
  * 発言フィルタ GUI。
  */
 @SuppressWarnings("serial")
-public class FilterPanel extends JDialog
+public final class FilterPanel extends JDialog
         implements ActionListener, TopicFilter{
 
     private static final int COLS = 4;
@@ -71,11 +71,12 @@ public class FilterPanel extends JDialog
 
     /**
      * 発言フィルタを生成する。
-     * @param owner フレームオーナー
      */
     @SuppressWarnings("LeakingThisInConstructor")
-    public FilterPanel(Frame owner){
-        super(owner);
+    public FilterPanel(){
+        super((Dialog)null);
+        // We need unowned dialog
+
         setModal(false);
 
         GUIUtils.modifyWindowAttributes(this, true, false, true);
@@ -109,6 +110,7 @@ public class FilterPanel extends JDialog
 
     /**
      * レイアウトデザインを行う。
+     *
      * @param topicPanel システムイベント選択
      * @param avatarPanel キャラ一覧
      * @param buttonPanel ボタン群
@@ -167,6 +169,7 @@ public class FilterPanel extends JDialog
 
     /**
      * システムイベントチェックボックス群パネルを作成。
+     *
      * @return システムイベントチェックボックス群パネル
      */
     private JComponent createTopicPanel(){
@@ -210,6 +213,7 @@ public class FilterPanel extends JDialog
 
     /**
      * キャラ一覧チェックボックス群パネルを作成。
+     *
      * @return キャラ一覧チェックボックス群パネル
      */
     private JComponent createAvatarPanel(){
@@ -248,6 +252,7 @@ public class FilterPanel extends JDialog
 
     /**
      * ボタン群パネルを生成。
+     *
      * @return ボタン群パネル
      */
     private JComponent createButtonPanel(){
@@ -276,6 +281,7 @@ public class FilterPanel extends JDialog
 
     /**
      * 下段パネルを生成する。
+     *
      * @return 下段パネル
      */
     private JComponent createBottomPanel(){
@@ -296,6 +302,7 @@ public class FilterPanel extends JDialog
 
     /**
      * リスナを登録する。
+     *
      * @param listener リスナ
      */
     public void addChangeListener(ChangeListener listener){
@@ -304,6 +311,7 @@ public class FilterPanel extends JDialog
 
     /**
      * リスナを削除する。
+     *
      * @param listener リスナ
      */
     public void removeChangeListener(ChangeListener listener){
@@ -312,6 +320,7 @@ public class FilterPanel extends JDialog
 
     /**
      * 全リスナを取得する。
+     *
      * @return リスナの配列
      */
     public ChangeListener[] getChangeListeners(){
@@ -344,8 +353,10 @@ public class FilterPanel extends JDialog
     }
 
     /**
-     * チェックボックスまたはボタン操作時にリスナとして呼ばれる。
      * {@inheritDoc}
+     *
+     * <p>チェックボックスまたはボタン操作時にリスナとして呼ばれる。
+     *
      * @param event イベント
      */
     @Override
@@ -407,6 +418,7 @@ public class FilterPanel extends JDialog
 
     /**
      * {@inheritDoc}
+     *
      * @param topic {@inheritDoc}
      * @return {@inheritDoc}
      */
@@ -462,6 +474,7 @@ public class FilterPanel extends JDialog
 
     /**
      * {@inheritDoc}
+     *
      * @return {@inheritDoc}
      */
     @Override
@@ -471,6 +484,7 @@ public class FilterPanel extends JDialog
 
     /**
      * {@inheritDoc}
+     *
      * @param context {@inheritDoc}
      * @return {@inheritDoc}
      */
@@ -520,6 +534,7 @@ public class FilterPanel extends JDialog
 
         /**
          * {@inheritDoc}
+         *
          * @return {@inheritDoc}
          */
         @Override
index fbabb65..0d1d8f0 100644 (file)
@@ -10,7 +10,7 @@ package jp.sfjp.jindolf.view;
 import java.awt.BorderLayout;
 import java.awt.Component;
 import java.awt.Container;
-import java.awt.Frame;
+import java.awt.Dialog;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.GridLayout;
@@ -64,7 +64,7 @@ import jp.sourceforge.jovsonz.JsValue;
  * 検索パネルGUI。
  */
 @SuppressWarnings("serial")
-public class FindPanel extends JDialog
+public final class FindPanel extends JDialog
         implements ActionListener,
                    ItemListener,
                    ChangeListener,
@@ -76,6 +76,7 @@ public class FindPanel extends JDialog
     private static final String LABEL_REENTER = "再入力";
     private static final String LABEL_IGNORE = "無視して検索をキャンセル";
 
+
     private final JComboBox<Object> findBox = new JComboBox<>();
     private final JButton searchButton = new JButton("検索");
     private final JButton clearButton = new JButton("クリア");
@@ -99,13 +100,15 @@ public class FindPanel extends JDialog
     private boolean canceled = false;
     private RegexPattern regexPattern = null;
 
+
     /**
      * 検索パネルを生成する。
-     * @param owner 親フレーム。
      */
     @SuppressWarnings("LeakingThisInConstructor")
-    public FindPanel(Frame owner){
-        super(owner);
+    public FindPanel(){
+        super((Dialog)null);
+        // We need unowned dialog
+
         setModal(true);
 
         GUIUtils.modifyWindowAttributes(this, true, false, true);
@@ -145,6 +148,7 @@ public class FindPanel extends JDialog
         return;
     }
 
+
     /**
      * デザイン・レイアウトを行う。
      */
@@ -225,7 +229,9 @@ public class FindPanel extends JDialog
 
     /**
      * {@inheritDoc}
-     * 検索ダイアログを表示・非表示する。
+     *
+     * <p>検索ダイアログを表示・非表示する。
+     *
      * @param show 表示フラグ。真なら表示。{@inheritDoc}
      */
     @Override
@@ -238,6 +244,7 @@ public class FindPanel extends JDialog
 
     /**
      * ダイアログが閉じられた原因を判定する。
+     *
      * @return キャンセルもしくはクローズボタンでダイアログが閉じられたらtrue
      */
     public boolean isCanceled(){
@@ -246,6 +253,7 @@ public class FindPanel extends JDialog
 
     /**
      * 一括検索が指定されたか否か返す。
+     *
      * @return 一括検索が指定されたらtrue
      */
     public boolean isBulkSearch(){
@@ -254,7 +262,8 @@ public class FindPanel extends JDialog
 
     /**
      * キャンセルボタン押下処理。
-     * このモーダルダイアログを閉じる。
+     *
+     * <p>このモーダルダイアログを閉じる。
      */
     private void actionCancel(){
         this.canceled = true;
@@ -265,7 +274,8 @@ public class FindPanel extends JDialog
 
     /**
      * 検索ボタン押下処理。
-     * このモーダルダイアログを閉じる。
+     *
+     * <p>このモーダルダイアログを閉じる。
      */
     private void actionSubmit(){
         Object selected = this.findBox.getSelectedItem();
@@ -306,6 +316,7 @@ public class FindPanel extends JDialog
 
     /**
      * 正規表現パターン異常系のダイアログ表示。
+     *
      * @param e 正規表現構文エラー
      * @return 再入力が押されたらtrue。それ以外はfalse。
      */
@@ -356,6 +367,7 @@ public class FindPanel extends JDialog
 
     /**
      * 現時点での検索パターンを得る。
+     *
      * @return 検索パターン
      */
     public RegexPattern getRegexPattern(){
@@ -364,6 +376,7 @@ public class FindPanel extends JDialog
 
     /**
      * 検索パターンを設定する。
+     *
      * @param pattern 検索パターン
      */
     public final void setRegexPattern(RegexPattern pattern){
@@ -388,7 +401,9 @@ public class FindPanel extends JDialog
 
     /**
      * {@inheritDoc}
-     * ボタン操作時にリスナとして呼ばれる。
+     *
+     * <p>ボタン操作時にリスナとして呼ばれる。
+     *
      * @param event イベント {@inheritDoc}
      */
     @Override
@@ -407,7 +422,9 @@ public class FindPanel extends JDialog
 
     /**
      * {@inheritDoc}
-     * コンボボックスのアイテム選択リスナ。
+     *
+     * <p>コンボボックスのアイテム選択リスナ。
+     *
      * @param event アイテム選択イベント {@inheritDoc}
      */
     @Override
@@ -426,7 +443,9 @@ public class FindPanel extends JDialog
 
     /**
      * {@inheritDoc}
-     * チェックボックス操作のリスナ。
+     *
+     * <p>チェックボックス操作のリスナ。
+     *
      * @param event チェックボックス操作イベント {@inheritDoc}
      */
     @Override
@@ -448,7 +467,9 @@ public class FindPanel extends JDialog
 
     /**
      * {@inheritDoc}
-     * コンボボックスのUI変更通知を受け取るリスナ。
+     *
+     * <p>コンボボックスのUI変更通知を受け取るリスナ。
+     *
      * @param event UI差し替えイベント {@inheritDoc}
      */
     @Override
@@ -464,7 +485,9 @@ public class FindPanel extends JDialog
 
     /**
      * コンボボックスエディタを修飾する。
-     * マージン修飾と等幅フォントをいじる。
+     *
+     * <p>マージン修飾と等幅フォントをいじる。
+     *
      * @param editor エディタ
      */
     private void modifyComboBoxEditor(ComboBoxEditor editor){
@@ -485,6 +508,7 @@ public class FindPanel extends JDialog
 
     /**
      * JSON形式の検索履歴情報を返す。
+     *
      * @return JSON形式の検索履歴情報
      */
     public JsObject getJson(){
@@ -506,6 +530,7 @@ public class FindPanel extends JDialog
 
     /**
      * JSON形式の検索履歴を反映させる。
+     *
      * @param root JSON形式の検索履歴。nullが来たら何もしない
      */
     public void putJson(JsObject root){
@@ -530,6 +555,7 @@ public class FindPanel extends JDialog
 
     /**
      * 起動時の履歴設定と等価か判定する。
+     *
      * @param conf 比較対象
      * @return 等価ならtrue
      */
@@ -555,6 +581,7 @@ public class FindPanel extends JDialog
 
         /**
          * {@inheritDoc}
+         *
          * @param list {@inheritDoc}
          * @param value {@inheritDoc}
          * @param index {@inheritDoc}
@@ -647,6 +674,7 @@ public class FindPanel extends JDialog
 
         /**
          * {@inheritDoc}
+         *
          * @return {@inheritDoc}
          */
         @Override
@@ -656,6 +684,7 @@ public class FindPanel extends JDialog
 
         /**
          * {@inheritDoc}
+         *
          * @param item {@inheritDoc}
          */
         @Override
@@ -667,6 +696,7 @@ public class FindPanel extends JDialog
 
         /**
          * {@inheritDoc}
+         *
          * @param index {@inheritDoc}
          * @return {@inheritDoc}
          */
@@ -698,6 +728,7 @@ public class FindPanel extends JDialog
 
         /**
          * {@inheritDoc}
+         *
          * @return {@inheritDoc}
          */
         @Override
@@ -712,6 +743,7 @@ public class FindPanel extends JDialog
 
         /**
          * {@inheritDoc}
+         *
          * @param listener {@inheritDoc}
          */
         @Override
@@ -722,6 +754,7 @@ public class FindPanel extends JDialog
 
         /**
          * {@inheritDoc}
+         *
          * @param listener {@inheritDoc}
          */
         @Override
@@ -732,6 +765,7 @@ public class FindPanel extends JDialog
 
         /**
          * 検索履歴ヒストリ追加。
+         *
          * @param regexPattern 検索履歴
          */
         public void addHistory(RegexPattern regexPattern){
@@ -755,6 +789,7 @@ public class FindPanel extends JDialog
 
         /**
          * プリセットでない検索ヒストリリストを返す。
+         *
          * @return 検索ヒストリリスト
          */
         public List<RegexPattern> getOriginalHistoryList(){
index d15fde3..3f4528b 100644 (file)
@@ -8,7 +8,7 @@
 package jp.sfjp.jindolf.view;
 
 import java.awt.Container;
-import java.awt.Frame;
+import java.awt.Dialog;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.Insets;
@@ -29,7 +29,7 @@ import jp.sfjp.jindolf.util.GUIUtils;
  * オプション設定パネル。
  */
 @SuppressWarnings("serial")
-public class OptionPanel
+public final class OptionPanel
         extends JDialog
         implements ActionListener, WindowListener{
 
@@ -46,11 +46,12 @@ public class OptionPanel
 
     /**
      * コンストラクタ。
-     * @param owner フレームオーナ
      */
     @SuppressWarnings("LeakingThisInConstructor")
-    public OptionPanel(Frame owner){
-        super(owner);
+    public OptionPanel(){
+        super((Dialog)null);
+        // We need unowned dialog
+
         setModal(true);
 
         GUIUtils.modifyWindowAttributes(this, true, false, true);
@@ -76,6 +77,7 @@ public class OptionPanel
 
     /**
      * レイアウトを行う。
+     *
      * @param content コンテナ
      */
     private void design(Container content){
@@ -109,6 +111,7 @@ public class OptionPanel
 
     /**
      * FontChooserを返す。
+     *
      * @return FontChooser
      */
     public FontChooser getFontChooser(){
@@ -117,6 +120,7 @@ public class OptionPanel
 
     /**
      * ProxyChooserを返す。
+     *
      * @return ProxyChooser
      */
     public ProxyChooser getProxyChooser(){
@@ -125,6 +129,7 @@ public class OptionPanel
 
     /**
      * DialogPrefPanelを返す。
+     *
      * @return DialogPrefPanel
      */
     public DialogPrefPanel getDialogPrefPanel(){
@@ -133,7 +138,9 @@ public class OptionPanel
 
     /**
      * ダイアログが閉じられた原因が「キャンセル」か否か判定する。
-     * ウィンドウクローズ操作は「キャンセル」扱い。
+     *
+     * <p>ウィンドウクローズ操作は「キャンセル」扱い。
+     *
      * @return 「キャンセル」ならtrue
      */
     public boolean isCanceled(){
@@ -142,7 +149,8 @@ public class OptionPanel
 
     /**
      * OKボタン押下処理。
-     * ダイアログを閉じる。
+     *
+     * <p>ダイアログを閉じる。
      */
     private void actionOk(){
         this.isCanceled = false;
@@ -153,7 +161,8 @@ public class OptionPanel
 
     /**
      * キャンセルボタン押下処理。
-     * ダイアログを閉じる。
+     *
+     * <p>ダイアログを閉じる。
      */
     private void actionCancel(){
         this.isCanceled = true;
@@ -164,6 +173,7 @@ public class OptionPanel
 
     /**
      * ボタン押下イベント受信。
+     *
      * @param event イベント
      */
     @Override
@@ -176,6 +186,7 @@ public class OptionPanel
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -185,8 +196,11 @@ public class OptionPanel
 
     /**
      * {@inheritDoc}
-     * ダイアログを閉じる。
-     * キャンセルボタン押下時と同じ。
+     *
+     * <p>ダイアログを閉じる。
+     *
+     * <p>キャンセルボタン押下時と同じ。
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -197,6 +211,7 @@ public class OptionPanel
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -206,6 +221,7 @@ public class OptionPanel
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -215,6 +231,7 @@ public class OptionPanel
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -224,6 +241,7 @@ public class OptionPanel
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
@@ -233,6 +251,7 @@ public class OptionPanel
 
     /**
      * {@inheritDoc}
+     *
      * @param event {@inheritDoc}
      */
     @Override
index 1949268..c46fb2a 100644 (file)
@@ -8,10 +8,10 @@
 package jp.sfjp.jindolf.view;
 
 import java.awt.EventQueue;
-import java.awt.Frame;
 import java.awt.Window;
 import java.util.LinkedList;
 import java.util.List;
+import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
 import javax.swing.UnsupportedLookAndFeelException;
@@ -22,6 +22,32 @@ import jp.sfjp.jindolf.summary.VillageDigest;
 
 /**
  * ウィンドウ群の管理を行う。
+ *
+ * <p>原則として閉じても再利用されるウィンドウを管理対象とする。
+ *
+ * <p>管理対象ウィンドウは
+ *
+ * <ul>
+ * <li>アプリのトップウィンドウ
+ * <li>検索ウィンドウ
+ * <li>フィルタウィンドウ
+ * <li>発言集計ウィンドウ
+ * <li>村プレイ記録のダイジェストウィンドウ
+ * <li>オプション設定ウィンドウ
+ * <li>ヘルプウィンドウ
+ * <li>ログウィンドウ
+ * </ul>
+ *
+ * <p>である。
+ *
+ * <p>トップウィンドウとヘルプウィンドウは{@link javax.swing.JFrame}、
+ * その他は{@link javax.swing.JDialog}である。
+ *
+ * <p>非モーダルダイアログは、他のウィンドウの下側にも回れるのが望ましい。
+ *
+ * <p>各ウィンドウは、他のウィンドウの下に完全に隠れても
+ * Windowsタスクバーなどを介して前面に引っ張り出す操作手段を
+ * 提供することが望ましい。
  */
 public class WindowManager {
 
@@ -40,8 +66,8 @@ public class WindowManager {
     private static final String TITLE_HELP =
             getFrameTitle("ヘルプ");
 
-    private static final Frame NULLPARENT = null;
 
+    private final TopFrame topFrame;
 
     private FilterPanel filterPanel;
     private LogFrame logFrame;
@@ -50,9 +76,8 @@ public class WindowManager {
     private VillageDigest villageDigest;
     private DaySummary daySummary;
     private HelpFrame helpFrame;
-    private TopFrame topFrame;
 
-    private final List<Window> windowSet = new LinkedList<>();
+    private final List<Window> windowSet;
 
 
     /**
@@ -60,6 +85,15 @@ public class WindowManager {
      */
     public WindowManager(){
         super();
+
+        this.topFrame = new TopFrame();
+        this.topFrame.setVisible(false);
+
+        JOptionPane.setRootFrame(this.topFrame);
+
+        this.windowSet = new LinkedList<>();
+        this.windowSet.add(this.topFrame);
+
         return;
     }
 
@@ -84,7 +118,7 @@ public class WindowManager {
     protected FilterPanel createFilterPanel(){
         FilterPanel result;
 
-        result = new FilterPanel(NULLPARENT);
+        result = new FilterPanel();
         result.setTitle(TITLE_FILTER);
         result.pack();
         result.setVisible(false);
@@ -114,7 +148,7 @@ public class WindowManager {
     protected LogFrame createLogFrame(){
         LogFrame result;
 
-        result = new LogFrame(NULLPARENT);
+        result = new LogFrame();
         result.setTitle(TITLE_LOGGER);
         result.pack();
         result.setSize(600, 500);
@@ -146,7 +180,7 @@ public class WindowManager {
     protected OptionPanel createOptionPanel(){
         OptionPanel result;
 
-        result = new OptionPanel(NULLPARENT);
+        result = new OptionPanel();
         result.setTitle(TITLE_OPTION);
         result.pack();
         result.setSize(450, 500);
@@ -177,7 +211,7 @@ public class WindowManager {
     protected FindPanel createFindPanel(){
         FindPanel result;
 
-        result = new FindPanel(NULLPARENT);
+        result = new FindPanel();
         result.setTitle(TITLE_FIND);
         result.pack();
         result.setVisible(false);
@@ -207,7 +241,7 @@ public class WindowManager {
     protected VillageDigest createVillageDigest(){
         VillageDigest result;
 
-        result = new VillageDigest(NULLPARENT);
+        result = new VillageDigest();
         result.setTitle(TITLE_DIGEST);
         result.pack();
         result.setSize(600, 550);
@@ -238,7 +272,7 @@ public class WindowManager {
     protected DaySummary createDaySummary(){
         DaySummary result;
 
-        result = new DaySummary(NULLPARENT);
+        result = new DaySummary();
         result.setTitle(TITLE_DAYSUMMARY);
         result.pack();
         result.setSize(400, 500);
@@ -293,26 +327,11 @@ public class WindowManager {
     }
 
     /**
-     * トップフレームを生成する。
-     *
-     * @return トップフレーム
-     */
-    protected TopFrame createTopFrame(){
-        TopFrame result = new TopFrame();
-        result.setVisible(false);
-        this.windowSet.add(result);
-        return result;
-    }
-
-    /**
      * トップフレームを返す。
      *
      * @return トップフレーム
      */
     public TopFrame getTopFrame(){
-        if(this.topFrame == null){
-            this.topFrame = createTopFrame();
-        }
         return this.topFrame;
     }
 
@@ -332,12 +351,12 @@ public class WindowManager {
 
         UIManager.setLookAndFeel(className);
 
-        this.windowSet.forEach((window) -> {
+        this.windowSet.forEach(window -> {
             SwingUtilities.updateComponentTreeUI(window);
         });
 
-        if(this.filterPanel  != null) this.filterPanel.pack();
-        if(this.findPanel    != null) this.findPanel.pack();
+        if(this.filterPanel != null) this.filterPanel.pack();
+        if(this.findPanel   != null) this.findPanel.pack();
 
         return;
     }