OSDN Git Service

modify initial card message.
authorOlyutorskii <olyutorskii@users.osdn.me>
Fri, 28 Feb 2020 02:10:08 +0000 (11:10 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Fri, 28 Feb 2020 02:10:08 +0000 (11:10 +0900)
src/main/java/jp/sfjp/jindolf/view/TopFrame.java
src/main/java/jp/sfjp/jindolf/view/TopView.java

index e0a25b5..6b6d1c2 100644 (file)
@@ -20,7 +20,22 @@ import javax.swing.JFrame;
 /**
  * メインアプリウィンドウ。
  *
- * {@link TopView}をウィンドウ表示するための皮。
+ * <p>各種ウィンドウシステムとの接点を管理する。
+ * (ウィンドウ最小化UI、クローズUI、リサイズ操作、
+ * ウィンドウタイトル、タスクバーアイコンなど)
+ *
+ * <p>メニューバーと{@link TopView}を自身のコンテナ上にレイアウトする。
+ * アプリ画面本体の処理は{@link TopView}に委譲される。
+ *
+ * <p>アプリウィンドウ上のカーソル形状を管理する。
+ * ヘビーな処理を行う間は砂時計アイコンになる。
+ *
+ * <p>glass paneの操作により、
+ * ヘビーな処理中の各種アプリ操作(キーボード、マウス)をマスクする。
+ *
+ * <p>アプリによる各ウィンドウの親及び祖先となる。
+ *
+ * <p>各種モーダルダイアログの親となる。
  */
 @SuppressWarnings("serial")
 public class TopFrame extends JFrame{
@@ -58,6 +73,8 @@ public class TopFrame extends JFrame{
     /**
      * グラスペインのカスタマイズを行う。
      *
+     * <p>アプリウィンドウは常に透明なグラスペインに覆い尽くされている。
+     *
      * <p>このグラスペインは、可視化されている間、
      * キーボード入力とマウス入力を無視する。
      */
@@ -73,7 +90,8 @@ public class TopFrame extends JFrame{
     }
 
     /**
-     * トップビューを返す。
+     * 実際のアプリ画面を担当する{@link TopView}を返す。
+     *
      * @return トップビュー
      */
     public TopView getTopView(){
@@ -81,18 +99,11 @@ public class TopFrame extends JFrame{
     }
 
     /**
-     * ビジー状態の設定を行う。
-     *
-     * <p>ヘビーなタスク実行をアピールするために、
-     * プログレスバーとカーソルの設定を行う。
+     * アプリウィンドウ上のマウスカーソルのビジー状態を管理する。
      *
-     * <p>ビジー中のマウス操作、キーボード入力は
-     * 全てグラブされるため無視される。
-     *
-     * @param isBusy trueならプログレスバーのアニメ開始&amp;WAITカーソル。
-     * falseなら停止&amp;通常カーソル。
+     * @param isBusy ビジーならtrue。
      */
-    public void setBusy(boolean isBusy){
+    private void setCursorBusy(boolean isBusy){
         Cursor cursor;
         if(isBusy){
             cursor = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
@@ -103,10 +114,41 @@ public class TopFrame extends JFrame{
         Component glassPane = getGlassPane();
         glassPane.setCursor(cursor);
 
-        this.topView.setBusy(isBusy);
+        return;
+    }
 
+    /**
+     * アプリウィンドウ上のマウス及びキー入力のグラブを管理する。
+     *
+     * <p>ビジー状態の場合、
+     * アプリ画面上のマウス及びキー操作は全て事前にグラブされ無視される。
+     *
+     * @param isBusy ビジーならtrue
+     */
+    private void setUiMask(boolean isBusy){
+        Component glassPane = getGlassPane();
         glassPane.setVisible(isBusy);
+        return;
+    }
 
+    /**
+     * ビジー状態の設定を行う。
+     *
+     * <p>ヘビーなタスク実行をアピールするために、
+     * プログレスバーとカーソルの設定を行う。
+     *
+     * <p>ビジー中のマウス操作、キーボード入力は
+     * 全てグラブされるため無視される。
+     *
+     * <p>プログラスバーの表示操作は{@link TopView}に委譲される。
+     *
+     * @param isBusy trueならプログレスバーのアニメ開始&amp;WAITカーソル。
+     *     falseなら停止&amp;通常カーソル。
+     */
+    public void setBusy(boolean isBusy){
+        setCursorBusy(isBusy);
+        setUiMask(isBusy);
+        this.topView.setBusy(isBusy);
         return;
     }
 
index 2011948..5b33b33 100644 (file)
@@ -29,11 +29,21 @@ import javax.swing.border.CompoundBorder;
 import jp.sfjp.jindolf.VerInfo;
 import jp.sfjp.jindolf.data.Land;
 import jp.sfjp.jindolf.data.Village;
-import jp.sfjp.jindolf.util.GUIUtils;
 
 /**
  * 最上位ビュー。
- * メインアプリウィンドウのコンポーネントの親コンテナ。
+ *
+ * <p>メインアプリウィンドウの各種コンポーネントの祖先コンテナ。
+ *
+ * <p>{@link JSplitPane}の左に国村選択リスト、
+ * 右にカードコンテナがレイアウトされる。
+ *
+ * <p>カードコンテナ上に
+ * 初期画面、国情報パネル{@link LandsTree}とタブブラウザ{@link TabBrowser}
+ * の3コンポーネントが重ねてレイアウトされ、必要に応じて切り替わる。
+ *
+ * <p>ヘビーなタスク実行をアピールするために、
+ * プログレスバーとフッタメッセージの管理を行う。
  */
 @SuppressWarnings("serial")
 public class TopView extends JPanel{
@@ -59,10 +69,12 @@ public class TopView extends JPanel{
 
     private final TabBrowser tabBrowser = new TabBrowser();
 
-    private JComponent browsePanel;
+    // to place toolbar
+    private final JComponent browsePanel = createBrowsePanel();
+
 
     /**
-     * ã\83\88ã\83\83ã\83\97ã\83\93ã\83¥ã\83¼ã\82\92ç\94\9fæ\88\90ã\81\99ã\82\8b
+     * ã\82³ã\83³ã\82¹ã\83\88ã\83©ã\82¯ã\82¿
      */
     public TopView(){
         super();
@@ -81,40 +93,42 @@ public class TopView extends JPanel{
 
     /**
      * カードパネルを生成する。
+     *
      * @return カードパネル
      */
     private JComponent createCards(){
-        this.browsePanel = createBrowsePanel();
+        JComponent initCard = createInitCard();
+        JComponent landInfoCard = createLandInfoCard();
 
-        JPanel panel = new JPanel();
-        panel.setLayout(this.cardLayout);
-        panel.add(INITCARD, createInitCard());
-        panel.add(LANDCARD, createLandInfoCard());
-        panel.add(BROWSECARD, this.browsePanel);
+        JPanel cardContainer = new JPanel();
+        cardContainer.setLayout(this.cardLayout);
 
-        return panel;
+        cardContainer.add(INITCARD, initCard);
+        cardContainer.add(LANDCARD, landInfoCard);
+        cardContainer.add(BROWSECARD, this.browsePanel);
+
+        return cardContainer;
     }
 
     /**
      * 初期パネルを生成。
+     *
      * @return 初期パネル
      */
     private JComponent createInitCard(){
-        JLabel initMessage = new JLabel("← 村を選択してください");
-
-        StringBuilder acct = new StringBuilder();
-        acct.append("※ 参加中の村がある人は<br></br>");
-        acct.append("メニューの「アカウント管理」から<br></br>");
-        acct.append("ログインしてください");
-        acct.insert(0, "<center>").append("</center>");
-        acct.insert(0, "<body>")  .append("</body>");
-        acct.insert(0, "<html>")  .append("</html>");
-        JLabel acctMessage = new JLabel(acct.toString());
+        StringBuilder init = new StringBuilder();
+        init.append("←    村を選択してください");
+        init.insert(0, "<font 'size=+1'>").append("</font>");
+        init.insert(0, "<center>").append("</center>");
+        init.insert(0, "<body>").append("</body>");
+        init.insert(0, "<html>").append("</html>");
+        JLabel initMessage = new JLabel(init.toString());
 
         StringBuilder warn = new StringBuilder();
         warn.append("※ たまにはWebブラウザでアクセスして、");
         warn.append("<br></br>");
         warn.append("運営の動向を確かめようね!");
+        warn.insert(0, "<font 'size=+1'>").append("</font>");
         warn.insert(0, "<center>").append("</center>");
         warn.insert(0, "<body>")  .append("</body>");
         warn.insert(0, "<html>")  .append("</html>");
@@ -130,7 +144,6 @@ public class TopView extends JPanel{
         constraints.anchor = GridBagConstraints.CENTER;
         constraints.gridx = GridBagConstraints.REMAINDER;
         panel.add(initMessage, constraints);
-        panel.add(acctMessage, constraints);
         panel.add(warnMessage, constraints);
 
         JScrollPane scrollPane = new JScrollPane(panel);
@@ -140,17 +153,20 @@ public class TopView extends JPanel{
 
     /**
      * 国別情報を生成。
+     *
      * @return 国別情報
      */
     private JComponent createLandInfoCard(){
-        this.landInfo.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        Border border = BorderFactory.createEmptyBorder(5, 5, 5, 5);
+        this.landInfo.setBorder(border);
         JScrollPane scrollPane = new JScrollPane(this.landInfo);
         return scrollPane;
     }
 
     /**
-     * 内部ブラウザを生成。
-     * @return 内部ブラウザ
+     * タブブラウザにツールバーを併設するためのコンテナを生成。
+     *
+     * @return コンテナ
      */
     private JComponent createBrowsePanel(){
         JPanel panel = new JPanel();
@@ -164,6 +180,7 @@ public class TopView extends JPanel{
 
     /**
      * ブラウザ用ツールバーをセットする。
+     *
      * @param toolbar ツールバー
      */
     public void setBrowseToolBar(JToolBar toolbar){
@@ -173,6 +190,7 @@ public class TopView extends JPanel{
 
     /**
      * SplitPaneを生成。
+     *
      * @param left 左コンポーネント
      * @param right 右コンポーネント
      * @return SplitPane
@@ -185,17 +203,18 @@ public class TopView extends JPanel{
         split.setContinuousLayout(false);
         split.setOneTouchExpandable(true);
         split.setDividerLocation(200);
-
         return split;
     }
 
     /**
      * ステータスバーを生成する。
+     *
      * @return ステータスバー
      */
     private JComponent createStatusBar(){
         this.sysMessage.setText(MSG_THANKS);
         this.sysMessage.setEditable(false);
+
         Border inside  = BorderFactory.createBevelBorder(BevelBorder.LOWERED);
         Border outside = BorderFactory.createEmptyBorder(2, 5, 2, 2);
         Border border = new CompoundBorder(inside, outside);
@@ -226,6 +245,7 @@ public class TopView extends JPanel{
 
     /**
      * 国村選択ツリービューを返す。
+     *
      * @return 国村選択ツリービュー
      */
     public JTree getTreeView(){
@@ -234,6 +254,7 @@ public class TopView extends JPanel{
 
     /**
      * タブビューを返す。
+     *
      * @return タブビュー
      */
     public TabBrowser getTabBrowser(){
@@ -242,6 +263,7 @@ public class TopView extends JPanel{
 
     /**
      * 村一覧ビューを返す。
+     *
      * @return 村一番ビュー
      */
     public LandsTree getLandsTree(){
@@ -252,7 +274,7 @@ public class TopView extends JPanel{
      * プログレスバーの設定を行う。
      *
      * @param busy trueならプログレスバーのアニメ開始。
-     * falseなら停止。
+     *     falseなら停止。
      */
     public void setBusy(boolean busy){
         this.progressBar.setIndeterminate(busy);
@@ -261,6 +283,7 @@ public class TopView extends JPanel{
 
     /**
      * ステータスバーの更新。
+     *
      * @param message 更新文字列
      */
     public void updateSysMessage(String message){
@@ -272,6 +295,7 @@ public class TopView extends JPanel{
 
     /**
      * ステータスバー文字列を返す。
+     *
      * @return ステータスバー文字列
      */
     public String getSysMessage(){
@@ -290,6 +314,7 @@ public class TopView extends JPanel{
 
     /**
      * 村情報を表示する。
+     *
      * @param village 村
      */
     public void showVillageInfo(Village village){
@@ -303,6 +328,7 @@ public class TopView extends JPanel{
 
     /**
      * 国情報を表示する。
+     *
      * @param land 国
      */
     public void showLandInfo(Land land){
@@ -311,5 +337,4 @@ public class TopView extends JPanel{
         return;
     }
 
-    // TODO setEnabled()を全子フレームにも波及させるべきか
 }