AWT/Swingでは、アプリケーションモーダル(アプリケーション全体をブロック)と親モーダル(親のみをブロック)ダイアログを表示できます。 SWTでどうすれば達成できますか?SWTを使用した親モーダルダイアログを表示
10
A
答えて
21
アプリケーション全体をブロックするためには、あなたは、スタイルSWT.APPLICATION_MODAL
との対話Shell
を作成し、それを開き、シェルが配置されるまで、UIイベントを送り出すことができます。
Display display = Display.getDefault();
Shell dialogShell = new Shell(display, SWT.APPLICATION_MODAL);
// populate dialogShell
dialogShell.open();
while (!dialogShell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
ブロックしたい場合親にのみ入力する場合は、スタイルSWT.PRIMARY_MODAL
を使用してみてください。ただし、Javadocは(他のモーダルスタイルの場合は)これがヒントであることを指定しています。すなわち、異なるSWT実装が同じように正確にそれを処理しないことがある。同様に、SWT.SYSTEM_MODAL
スタイルを尊重する実装についてはわかりません。
UPDATE:あなたが同時に開いて2個の以上の一次モーダルを持っている場合、あなたは彼らのように、モーダルが閉じられるまでのイベントをポンプするためにトリックを使用することはできません最初のコメントに
回答任意の順序で閉じることができます。コードは実行されますが、現在のダイアログが閉じられた後のwhileループの後に実行が再開されますとその後に開いたダイアログはすべてです。この場合、閉じたときにコールバックを取得するために、各ダイアログにDisposeListener
を登録します。このようなもの:
void run() {
Display display = new Display();
Shell shell1 = openDocumentShell(display);
Shell shell2 = openDocumentShell(display);
// close both shells to exit
while (!shell1.isDisposed() || !shell2.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
Shell openDocumentShell(final Display display) {
final Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setLayout(new FillLayout());
Button button = new Button(shell, SWT.PUSH);
button.setText("Open Modal Dialog");
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
System.out.println("Button pressed, about to open modal dialog");
final Shell dialogShell = new Shell(shell, SWT.PRIMARY_MODAL | SWT.SHEET);
dialogShell.setLayout(new FillLayout());
Button closeButton = new Button(dialogShell, SWT.PUSH);
closeButton.setText("Close");
closeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
dialogShell.dispose();
}
});
dialogShell.setDefaultButton(closeButton);
dialogShell.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
System.out.println("Modal dialog closed");
}
});
dialogShell.pack();
dialogShell.open();
}
});
shell.pack();
shell.open();
return shell;
}
関連する問題
- 1. JQueryを使用したモーダルダイアログ実装の表示
- 2. PRISMを使用したモーダルダイアログの表示4
- 3. ACSを使用したIdP認証後にSWTトークンを表示
- 4. 表示を使用して偽のモーダルダイアログを表示しますか?
- 5. ルックアップビューモデルを使用してモーダルダイアログを表示する
- 6. SWTを使用して画像を表示
- 7. アラートボックスを表示した後、jQueryモーダルダイアログをオートクローズします。
- 8. jveryを使用したmvc.netのモーダルダイアログ
- 9. サービスロケータを使用したMVVMモーダルダイアログ
- 10. SWTを使用した高速ピクセルプロット?
- 11. SBTを使用したScala SWTプロジェクト
- 12. CSSターゲットを使用して親部門を表示する
- 13. モーダルダイアログを一時的に非表示
- 14. モーダルダイアログの上にプログレスバーダイアログを表示
- 15. SWTの例外の表示
- 16. jQueryを使って非モーダルダイアログを表示するには?ここ
- 17. モーダルダイアログがWPFで表示され、ユーザーが親ウィンドウをクリックしてモーダルダイアログを点滅または点滅させるとき
- 18. SWTを使用してコンポーネントの親を変更する方法は?
- 19. swtボタンにテキストを垂直に表示
- 20. SWTを使用してカスタムボタンを作成
- 21. TA-Libを使用したインタラクティブグラフ表示
- 22. PHPを使用した表示名
- 23. コンストラクタを使用したモジュールパターンの表示
- 24. AJAXを使用したページコンテンツの表示
- 25. ActiveXを使用したモーダルダイアログボックスの表示
- 26. div上のjQuery UI表示モーダルダイアログ?
- 27. タスクバーに表示されるセカンダリフォームのモーダルダイアログ
- 28. swt/jfaceダイアログボックスで画像を表示するためのヒント
- 29. CTEを使用して親を列としてリスト表示する
- 30. Wordpressはカスタムループを使用して子ページに親コンテンツを表示します
ありがとうございます。 2つの異なるシェルで 'SWT.PRIMARY_MODAL'-dialogを使用する場合、どのようにイベントループがどのように表示され、ダイアログは他のシェルをブロックしませんか?たぶん、各シェルに2つのシェルと1つの親モーダルダイアログを表示した完全な作業サンプルを提供できますか?前もって感謝します。 – Mot
(ところで、SWT.SHEETスタイルは、これらのPRIMARY_MODALダイアログに特に適しています。Mac OS Xでは、ダイアログが親のタイトルバーから出てくるように見え、親に目に見える形で表示されますそれは親とのUIインタラクションをブロックしていますが、他のプラットフォームで何が起こるかはわかりません...) –