我将SWT与非SWT窗口混合(以前是AWT窗口但我现在使用的是原生GLFW窗口)。当我调用fileDialog.show()
时,我希望文件对话框获取完整的应用程序上下文,它在现有的非SWT窗口之上绘制,并且无法单击非SWT窗口。即,与使用AWT和AWT FileDialog时的行为相同。
但是,当我显示SWT FileDialog时,它仍然允许我单击另一个窗口并将该窗口置于前面。
以下是我设置应用的方式。我使用LWJGL 3(通过LibGDX),后者又通过GLFW绑定创建一个本机窗口。这也是我使用SWT的原因之一...... GLFW不支持AWT或Swing。
public static void main (String[] arg) {
//...
new Lwjgl3Application(app, config); //starts an OpenGL loop in a native GLFW window
prepareSWT();
}
static void prepareSWT (){
swtThread = new Thread(new Runnable (){
@Override
public void run() {
swtDisplay = new Display();
swtShell = new Shell(swtDisplay);
while (!swtDisplay.isDisposed()) {
if (!swtDisplay.readAndDispatch())
swtDisplay.sleep();
}
swtDisplay.dispose();
}
});
swtThread.start();
}
public static void showSWTFileChooserDialog (final FileChooserResult fileChooserResult){
swtDisplay.asyncExec(new Runnable() {
@Override
public void run() {
final org.eclipse.swt.widgets.FileDialog fileChooser =
new org.eclipse.swt.widgets.FileDialog(swtShell, SWT.OPEN);
fileChooser.open();
String filename = fileChooser.getFileName();
if (filename == null || filename.equals("")){
fileChooserResult.file = null;
} else {
fileChooserResult.file = new File(fileChooser.getFilterPath(), filename);
}
fileChooserResult.ready = true;
}
});
}
我对如何在非SWT窗口上强制使用FileDialog感到茫然。
答案 0 :(得分:0)
在Shell上设置SWT.SYSTEM_MODAL
样式将阻止对系统上所有应用程序窗口的输入。