2014-02-26 109 views
0

我想將焦點從IntelliJ的一個實例轉移到另一個實例。即使窗口顯示在所有內容之上,並且光標開始閃爍,焦點實際上位於上一個窗口中,並且圖標在任務欄中閃爍。如何竊取Windows 7的焦點

在一個過程的幀之間切換很好,但切換到另一個過程是個問題。

的Windows 7 64位,jdk1.7.0_51

JFrame frame = WindowManager.getInstance().getFrame(project); 

//the only reliable way I found to bring it to the top 
boolean aot = frame.isAlwaysOnTop(); 
frame.setAlwaysOnTop(true); 
frame.setAlwaysOnTop(aot); 

int frameState = frame.getExtendedState(); 
if ((frameState & Frame.ICONIFIED) == Frame.ICONIFIED) { 
    // restore the frame if it is minimized 
    frame.setExtendedState(frameState^Frame.ICONIFIED); 
} 
frame.toFront(); 
frame.requestFocus(); 
//frame.requestFocusInWindow(); same behaviour as requestFocus 

我也試過機器人,並創造新的臨時框架中,沒有運氣其他問題建議。

回答

0

JFrame.setVisible(true)通常適用於我。

+0

不適合我,很遺憾。 – Meo

1

好像我用的機器人之前不正確破解,因爲現在它似乎很好地工作:

 try { 
      //remember the last location of mouse 
      final Point oldMouseLocation = MouseInfo.getPointerInfo().getLocation(); 

      //simulate a mouse click on title bar of window 
      Robot robot = new Robot(); 
      robot.mouseMove(frame.getX(), frame.getY()); 
      robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); 
      robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); 

      //move mouse to old location 
      robot.mouseMove((int) oldMouseLocation.getX(), (int) oldMouseLocation.getY()); 
     } catch (Exception ex) { 
      //just ignore exception, or you can handle it as you want 
     } finally { 
      frame.setAlwaysOnTop(false); 
     } 

來源:https://stackoverflow.com/a/7404378/685796

+0

該代碼在Win XP上無法正常工作,但它不必如此,如果沒有它,焦點就沒有問題。 – Meo