OSDN Git Service

remove Cursor operation from Controller.
authorOlyutorskii <olyutorskii@users.osdn.me>
Mon, 24 Feb 2020 13:20:23 +0000 (22:20 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Mon, 24 Feb 2020 13:20:23 +0000 (22:20 +0900)
src/main/java/jp/sfjp/jindolf/Controller.java
src/main/java/jp/sfjp/jindolf/view/TopFrame.java
src/main/java/jp/sfjp/jindolf/view/TopView.java

index 4ee121b..744fff5 100644 (file)
@@ -7,8 +7,6 @@
 
 package jp.sfjp.jindolf;
 
-import java.awt.Component;
-import java.awt.Cursor;
 import java.awt.EventQueue;
 import java.awt.Frame;
 import java.awt.Window;
@@ -238,14 +236,12 @@ public class Controller
      * @param isBusy ビジーならtrue
      * @param message ステータスバー表示。nullなら変更なし
      */
-    public void submitBusyStatus(final boolean isBusy, final String message){
-        Runnable task = () -> {
+    public void submitBusyStatus(boolean isBusy, String message){
+        EventQueue.invokeLater(() -> {
             if(isBusy) setBusy(true);
             if(message != null) updateStatusBar(message);
             if( ! isBusy ) setBusy(false);
-        };
-        EventQueue.invokeLater(task);
-
+        });
         return;
     }
 
@@ -1649,26 +1645,25 @@ public class Controller
     }
 
     /**
-     * ヘビーなタスク実行をアピール。
+     * ビジー状態の設定を行う。
+     * 
+     * <p>ヘビーなタスク実行をアピールするために、
      * プログレスバーとカーソルの設定を行う。
+     * 
+     * <p>ビジー中のActionコマンド受信は無視される。
+     *
+     * <p>ビジー中のトップフレームのマウス操作、キーボード入力は
+     * 全てグラブされるため無視される。
+     *
      * @param isBusy trueならプログレスバーのアニメ開始&amp;WAITカーソル。
      *                falseなら停止&amp;通常カーソル。
      */
-    private void setBusy(final boolean isBusy){
+    private void setBusy(boolean isBusy){
         this.isBusyNow = isBusy;
 
+        TopFrame topFrame = getTopFrame();
         Runnable microJob = () -> {
-            Cursor cursor;
-            if(isBusy){
-                cursor = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
-            }else{
-                cursor = Cursor.getDefaultCursor();
-            }
-
-            Component glass = getTopFrame().getGlassPane();
-            glass.setCursor(cursor);
-            glass.setVisible(isBusy);
-            Controller.this.topView.setBusy(isBusy);
+            topFrame.setBusy(isBusy);
         };
 
         if(EventQueue.isDispatchThread()){
index dc0b2aa..e0a25b5 100644 (file)
@@ -10,6 +10,7 @@ package jp.sfjp.jindolf.view;
 import java.awt.BorderLayout;
 import java.awt.Component;
 import java.awt.Container;
+import java.awt.Cursor;
 import java.awt.LayoutManager;
 import java.awt.event.KeyAdapter;
 import java.awt.event.MouseAdapter;
@@ -18,6 +19,7 @@ import javax.swing.JFrame;
 
 /**
  * メインアプリウィンドウ。
+ *
  * {@link TopView}をウィンドウ表示するための皮。
  */
 @SuppressWarnings("serial")
@@ -25,6 +27,7 @@ public class TopFrame extends JFrame{
 
     private final TopView topView = new TopView();
 
+
     /**
      * コンストラクタ。
      */
@@ -39,20 +42,24 @@ public class TopFrame extends JFrame{
         return;
     }
 
+
     /**
      * レイアウトをデザインする。
+     *
      * @param container コンテナ
      */
     private void design(Container container){
         LayoutManager layout = new BorderLayout();
         container.setLayout(layout);
         container.add(this.topView, BorderLayout.CENTER);
-
         return;
     }
 
     /**
      * グラスペインのカスタマイズを行う。
+     *
+     * <p>このグラスペインは、可視化されている間、
+     * キーボード入力とマウス入力を無視する。
      */
     private void modifyGrassPane(){
         Component glassPane = new JComponent() {};
@@ -73,4 +80,34 @@ public class TopFrame extends JFrame{
         return this.topView;
     }
 
+    /**
+     * ビジー状態の設定を行う。
+     *
+     * <p>ヘビーなタスク実行をアピールするために、
+     * プログレスバーとカーソルの設定を行う。
+     *
+     * <p>ビジー中のマウス操作、キーボード入力は
+     * 全てグラブされるため無視される。
+     *
+     * @param isBusy trueならプログレスバーのアニメ開始&amp;WAITカーソル。
+     * falseなら停止&amp;通常カーソル。
+     */
+    public void setBusy(boolean isBusy){
+        Cursor cursor;
+        if(isBusy){
+            cursor = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
+        }else{
+            cursor = Cursor.getDefaultCursor();
+        }
+
+        Component glassPane = getGlassPane();
+        glassPane.setCursor(cursor);
+
+        this.topView.setBusy(isBusy);
+
+        glassPane.setVisible(isBusy);
+
+        return;
+    }
+
 }
index eab665f..3f1fcf7 100644 (file)
@@ -249,9 +249,10 @@ public class TopView extends JPanel{
     }
 
     /**
-     * プログレスバーとカーソルの設定を行う。
-     * @param busy trueならプログレスバーのアニメ開始&amp;WAITカーソル。
-     *              falseなら停止&amp;通常カーソル。
+     * プログレスバーの設定を行う。
+     *
+     * @param busy trueならプログレスバーのアニメ開始。
+     * falseなら停止。
      */
     public void setBusy(boolean busy){
         this.progressBar.setIndeterminate(busy);