2012-03-15 25 views
6

現在、Windows 7でSWT Javaアプリケーションを開発中です。通常、アプリケーションは最小化され、シリアルポートにイベントがある場合、アプリケーションは最大化されます。次のコードは最大化部分を行います。Java SWTアプリケーション - 前面に表示

private void bringToFront(final Shell shell) { 
    shell.getDisplay().asyncExec(new Runnable() { 
     public void run() { 
      if(!shell.getMaximized()){ 
       shell.setMaximized(true); 
      } 
      shell.forceActive(); 
     } 
    }); 
} 

ただし、SWTアプリケーションが別のアプリケーションの背後で最大化されることがあります。たとえば、フルスクリーンモードで実行しているパワーポイントを持っている場合、最大化されたアプリケーションはパワーポイントプレゼンテーションの背後にあります。私はそれを最大化し、他のすべてのアプリケーションの前に持って行きたいと思います。

誰でも手伝ってもらえますか?

+0

いいえ。 forceActiveメソッドは、シェルをZオーダーの先頭に移動します。これにより、他のウィンドウもZオーダーの先頭に移動していない場合に限り、シェルが前面に表示されます。 –

答えて

-2

フルスクリーンモードで作業するには、アプリケーションが必要です。このリンク How can I create a Java Swing app that covers the Windows Title bar?

+1

私はSWINGライブラリを使用していませんが、SWTは使用していません。私はSWTで同様のオプションを試しましたが、期待通りのものではありません。最大化されたときのJavaアプリケーションは、依然としてPower Pointアプリケーションの背後にあります。 – Dinesh

5

外観は、あなたのShellインスタンスのスタイルビットSWT.ON_TOPを設定する必要があります。残念ながら、スタイルビットを設定することはコンストラクタでのみ可能です。

あなたのユースケースの設定を理解すれば、そのビットが実行可能になる可能性があります。最小化状態と最大化状態を切り替えるように見えますからです。

これは不可能な場合は、状態を切り替えるときにシェルとその内容を破棄して再作成するだけです。

4

私はこの問題の回避策を見つけました。これは最善の解決策ではないかもしれませんが、私にとっては効果的です。誰かがより良い解決策を投稿している場合。おかげ+ Dイベントが

 private void showDesktop() { 
     try{ 
      Robot robot = new Robot(); 
      robot.keyPress(KeyEvent.VK_WINDOWS); 
      robot.keyPress(KeyEvent.VK_D); 
      robot.keyRelease(KeyEvent.VK_D); 
      robot.keyRelease(KeyEvent.VK_WINDOWS); 
      } 
     catch(Exception e){e.printStackTrace();} 
    } 

が続いてシェルアプリケーション

private void bringToFront(final Shell shell) { 

     showDesktop(); //minimize all the application 

     Thread.sleep(5000); // here have to wait for some time, I am not sure why 

     shell.getDisplay().asyncExec(new Runnable() { 
     public void run() { 
      if(!shell.getMaximized()){ 
       shell.setMaximized(true); 
      } 
      shell.forceActive(); 
     } 
    }); 
    } 
5

別の "hackey" があるに最大限のデスクトップを表示するために最初のWindowsキーをシミュレート方法showDesktop()を使用

他のすべてを最小限にする必要はありません。 shellの前の状態に戻すには、実際にはshell.setMinimized(false)に電話してからshell.setActive()に電話する必要があります。しかし、それはshellが真に最小化状態にあった場合にのみ機能します。だからここで私の最終的な解決策は、人工的にそれが最小化されていない場合はshellを最小化します。最小化を行う必要がある場合、コストは簡単なアニメーションです。

shell.getDisplay().syncExec(new Runnable() { 

    @Override 
    public void run() { 
     if (!shell.getMinimized()) 
     { 
      shell.setMinimized(true); 
     } 
     shell.setMinimized(false); 
     shell.setActive(); 
    } 
}); 
関連する問題