2012-03-15 3 views
6

Tôi hiện đang phát triển một ứng dụng java SWT trên Windows 7. Thông thường ứng dụng sẽ được thu nhỏ và khi có sự kiện trên cổng nối tiếp, ứng dụng sẽ tối đa hóa chính nó. Đoạn mã sau làm phần tối đa.Java SWT application - Bring To Front

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

Nhưng đôi khi ứng dụng SWT được tối đa sau một ứng dụng khác. Ví dụ, nếu tôi có một powerpoint đang chạy trong chế độ toàn màn hình ứng dụng tối đa là đằng sau trình bày powerpoint. Tôi muốn làm cho nó được tối đa hóa và mang đến trước tất cả các ứng dụng khác.

Có ai có thể giúp tôi không?

+0

Không. Phương thức forceActive di chuyển shell đến đỉnh của thứ tự Z. Điều này sẽ mang vỏ về phía trước nếu và chỉ khi không có cửa sổ nào khác cũng di chuyển đến đầu của lệnh Z. –

Trả lời

-2

Bạn cần ứng dụng của mình hoạt động ở chế độ toàn màn hình.

xem liên kết này How can I create a Java Swing app that covers the Windows Title bar?

+1

ok, tôi không sử dụng thư viện SWING nhưng SWT. Tôi đã thử với tùy chọn tương tự trên SWT nhưng nó không đáp ứng những gì tôi mong đợi. Ứng dụng java khi tối đa vẫn ở phía sau ứng dụng điểm năng lượng. – Dinesh

5

Bạn cần phải thiết lập các phong cách chút SWT.ON_TOP trên Shell dụ của bạn. Thật không may thiết lập các bit kiểu chỉ có thể có trong hàm tạo.

Nhưng nếu tôi hiểu cài đặt trường hợp sử dụng của bạn, bit đó có thể là khả thi đối với bạn, vì bạn dường như chỉ chuyển đổi giữa trạng thái thu nhỏ và phóng to.

Nếu điều đó là không thể, chỉ cần vứt bỏ và tạo lại vỏ và nội dung của nó, khi bạn muốn chuyển đổi giữa các trạng thái.

4

Tôi đã tìm thấy một số giải pháp cho sự cố này, có thể không phải là giải pháp tốt nhất nhưng phù hợp với tôi. Nếu ai đó có giải pháp tốt hơn hãy tiếp tục đăng. Cảm ơn

Sử dụng phương pháp showDesktop() đầu tiên mô phỏng cửa sổ chính + D kiện để hiển thị các máy tính để bàn

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

Sau đó phát huy tối đa các ứng dụng vỏ

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

Có một khác "hackey" cách để làm điều này hơn những gì bạn tìm thấy, mà không yêu cầu bạn phải giảm thiểu mọi thứ khác. Bạn thực sự cần gọi shell.setMinimized(false) và sau đó shell.setActive() để khôi phục trạng thái trước đó của shell. Tuy nhiên, điều đó chỉ hoạt động nếu shell thực sự ở trạng thái thu nhỏ. Vì vậy, đây là giải pháp cuối cùng của tôi, mà giả tạo giảm thiểu các shell nếu nó đã không được giảm thiểu rồi. Chi phí là một hình ảnh động nhanh nếu việc giảm thiểu phải được thực hiện.

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

    @Override 
    public void run() { 
     if (!shell.getMinimized()) 
     { 
      shell.setMinimized(true); 
     } 
     shell.setMinimized(false); 
     shell.setActive(); 
    } 
});