私のアプリケーションには、JavaSWTによって作成されたダイアログ画面があります。モーダルダイアログ(警告/エラー/ファイルダイアログなど)を開くと、親画面をクリックした後、親画面の上に留まらないか、メイン画面の後ろで開きます。ダイアログは、Alt+Tabキーを押すことによってのみ開くことができます。この問題はOpenSUSE11.04で発生します。Windowsでは発生しません。
MainクラスとShellExampleクラスは、問題をテストするためのものです。オープニングシェルの[モーダルダイアログを開く]ボタンを押すと、FileDialogが遅れます。MessageDialogは上部で開いていますが、シェルをクリックすると元に戻ります。
これがメインクラスです。
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Display display = new Display();
final Shell shell = new Shell(display);
shell.setLocation(0,0);
shell.setSize(500, 500);
shell.setLayout(new GridLayout());
FormToolkit toolkit = new FormToolkit(shell.getDisplay());
Button okButton = toolkit.createButton(shell, " Open Shell ", SWT.NONE);
okButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ShellExample mainDialog = new ShellExample(shell);
mainDialog.open();
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
これはShellExampleクラスです。
public class ShellExample extends Dialog {
private Shell shell;
public ShellExample(Shell parent) {
super(parent, SWT.NO_TRIM | SWT.PRIMARY_MODAL);
// TODO Auto-generated constructor stub
}
public Object open() {
// TODO Auto-generated method stub
shell = new Shell(getParent(), getStyle());
createContents();
shell.open();
shell.layout();
Display display = getParent().getDisplay();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
return null;
}
private void createContents() {
// TODO Auto-generated method stub
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
shell.setSize(ge.getMaximumWindowBounds().width,ge.getMaximumWindowBounds().height);
shell.setText(getText());
shell.setLayout(new FillLayout());
shell.setLayout(new GridLayout());
FormToolkit toolkit = new FormToolkit(shell.getDisplay());
Button okButton = toolkit.createButton(shell, " open modal dialog ", SWT.NONE);
okButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
FileDialog fd = new FileDialog(shell, SWT.SAVE);
fd.setText("file dialog");
fd.open();
// MessageDialog.open(MessageDialog.WARNING , shell, "warning_title", "warning_message", SWT.APPLICATION_MODAL);
}
});
}
}
助言がありますか?
ありがとう。