Swing/BlockingDialog のバックアップ(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/BlockingDialog へ行く。
- 1 (2017-04-20 (木) 17:45:31)
- 2 (2018-04-13 (金) 17:21:36)
- 3 (2018-12-19 (水) 20:42:05)
- 4 (2020-11-13 (金) 12:09:54)
- 5 (2022-12-01 (木) 10:40:28)
- category: swing folder: BlockingDialog title: Modalで透明なJDialogを使って親のJFrameへの入力をブロックする tags: [JDialog, JFrame] author: aterai pubdate: 2015-10-26T04:45:10+09:00 description: Modalで透明なJDialogを表示することで、親のJFrame全体への入力操作をブロックします。 image:
概要
Modal
で透明なJDialog
を表示することで、親のJFrame
全体への入力操作をブロックします。
Screenshot
Advertisement
サンプルコード
Window w = SwingUtilities.getWindowAncestor(getRootPane());
JDialog dialog = new JDialog(w, Dialog.ModalityType.DOCUMENT_MODAL); // APPLICATION_MODAL);
dialog.setUndecorated(true);
dialog.setBounds(w.getBounds());
dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
int color = check.isSelected() ? 0x22_FF_00_00 : 0x01_00_00_00;
dialog.setBackground(new Color(color, true));
(new Task() {
@Override public void done() {
if (!isDisplayable()) {
cancel(true);
return;
}
dialog.setVisible(false);
}
}).execute();
dialog.setVisible(true);
View in GitHub: Java, Kotlin解説
上記のサンプルでは、以下のような設定を行ったJDialog
を表示することで親JFrame
のタイトルバー、閉じる、最大化、最小化ボタンを含めて一定時間入力不可にするテストを行っています。
- モーダル(
Dialog.ModalityType.DOCUMENT_MODAL
)なJDialog
を作成 dialog.setUndecorated(true)
でタイトルバーなどの装飾を非表示に設定JDialog
のカーソルをCursor.WAIT_CURSOR
に設定JDialog
の背景色を透明(完全に透明ではない)に設定- 注: このサンプルには
JDialog
の表示を途中で中断する方法がない