2012-03-15 4 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에서 비슷한 옵션을 시도했지만 기대 한 바를 충족시키지 못했다. 최대화되었을 때 자바 애플리케이션은 여전히 ​​파워 포인트 애플리케이션 뒤에있다. – 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.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(); 
    } 
}); 
관련 문제