package jp.sfjp.jindolf;
-import java.awt.Component;
-import java.awt.Cursor;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.Window;
* @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;
}
}
/**
- * ヘビーなタスク実行をアピール。
+ * ビジー状態の設定を行う。
+ *
+ * <p>ヘビーなタスク実行をアピールするために、
* プログレスバーとカーソルの設定を行う。
+ *
+ * <p>ビジー中のActionコマンド受信は無視される。
+ *
+ * <p>ビジー中のトップフレームのマウス操作、キーボード入力は
+ * 全てグラブされるため無視される。
+ *
* @param isBusy trueならプログレスバーのアニメ開始&WAITカーソル。
* falseなら停止&通常カーソル。
*/
- 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()){
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;
/**
* メインアプリウィンドウ。
+ *
* {@link TopView}をウィンドウ表示するための皮。
*/
@SuppressWarnings("serial")
private final TopView topView = new TopView();
+
/**
* コンストラクタ。
*/
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() {};
return this.topView;
}
+ /**
+ * ビジー状態の設定を行う。
+ *
+ * <p>ヘビーなタスク実行をアピールするために、
+ * プログレスバーとカーソルの設定を行う。
+ *
+ * <p>ビジー中のマウス操作、キーボード入力は
+ * 全てグラブされるため無視される。
+ *
+ * @param isBusy trueならプログレスバーのアニメ開始&WAITカーソル。
+ * falseなら停止&通常カーソル。
+ */
+ 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;
+ }
+
}
}
/**
- * プログレスバーとカーソルの設定を行う。
- * @param busy trueならプログレスバーのアニメ開始&WAITカーソル。
- * falseなら停止&通常カーソル。
+ * プログレスバーの設定を行う。
+ *
+ * @param busy trueならプログレスバーのアニメ開始。
+ * falseなら停止。
*/
public void setBusy(boolean busy){
this.progressBar.setIndeterminate(busy);