2016-05-06 13 views
-1

Ich mische SWT mit einem Nicht-SWT-Fenster (früher ein AWT-Fenster, aber ich verwende jetzt ein natives GLFW-Fenster). Wenn ich fileDialog.show() aufrufen möchte, möchte ich, dass der Dateidialog den vollständigen Anwendungskontext erhält, in dem er über das vorhandene Nicht-SWT-Fenster gezeichnet wird, und auf das Nicht-SWT-Fenster kann nicht geklickt werden. das gleiche Verhalten wie bei der Verwendung von AWT mit einem AWT FileDialog.Deaktivieren Sie SWT-Fenster, während SWT-Dialog zeigt

Wenn ich jedoch den SWT FileDialog zeige, kann ich immer noch auf das andere Fenster klicken und das Fenster nach vorne bringen.

So richte ich meine App ein. Ich benutze LWJGL 3 (via LibGDX), welches wiederum ein natives Fenster durch eine GLFW-Bindung erzeugt. Und das ist einer der Gründe, warum ich SWT verwende ... GLFW unterstützt AWT oder Swing nicht.

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; 
      } 
     }); 
    } 

ich ratlos bin, wie Sie den File-Dialog zu bekommen gezwungen auf den Nicht-SWT-Fenster werden.

+0

Zum Shell Konstruktor Sie könnten versuchen, den Stil etwas SWT.APPLICATION_MODAL zu passieren, nicht sicher, ob es in Ihrem Fall tho –

+0

funktioniert hilft nicht. Vielen Dank. – Tenfour04

+0

Ich habe auch SWT.ON_TOP ausprobiert, was es an die Spitze setzt, wie ich es mag, aber es stellt es auch auf alle anderen Apps, auch wenn ich zu anderen Apps wechsle (zumindest in Windows 7). – Tenfour04

Antwort