Java SWT-приложение - вывод на передний план - PullRequest
8 голосов
/ 15 марта 2012

В настоящее время я разрабатываю Java-приложение SWT в Windows 7. Обычно приложение будет свернуто, а при возникновении события на последовательном порту приложение должно развернуться само.Следующий код выполняет максимизацию.

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

Но иногда приложение SWT максимизируется за другим приложением.Например, если у меня PowerPoint работает в полноэкранном режиме, развернутое приложение находится за презентацией PowerPoint.Я бы хотел, чтобы он был максимально развернут и поставлен перед всеми остальными приложениями.

Кто-нибудь может мне помочь?

Ответы [ 4 ]

6 голосов
/ 25 августа 2015

Есть еще один "хаккейный" способ сделать это, чем тот, который вы нашли, который не требует от вас минимизации всего остального.Вам на самом деле нужно позвонить shell.setMinimized(false) и после этого shell.setActive(), чтобы восстановить предыдущее состояние shell.Тем не менее, это работает, только если shell действительно был в минимизированном состоянии.Итак, вот мое окончательное решение, которое искусственно минимизирует shell, если оно еще не было минимизировано.Стоимость - быстрая анимация, если минимизация должна быть выполнена.

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

    @Override
    public void run() {
        if (!shell.getMinimized())
        {
            shell.setMinimized(true);
        }
        shell.setMinimized(false);
        shell.setActive();
    }
});
5 голосов
/ 16 марта 2012

Вам необходимо установить бит стиля SWT.ON_TOP в вашем экземпляре Shell. К сожалению, установка битов стиля возможна только в конструкторе.

Но если я понимаю вашу настройку варианта использования, этот бит может быть жизнеспособным для вас, поскольку вы, похоже, переключаетесь только между минимизированным и максимизированным состоянием.

Если это невозможно, просто удалите и заново создайте свою оболочку и ее содержимое, когда вы хотите переключаться между состояниями.

3 голосов
/ 20 марта 2012

Я нашел решение этой проблемы, возможно, не лучшее решение, но работает для меня.Если у кого-то есть лучшее решение, оставайтесь в курсе.Спасибо

Используя метод showDesktop () сначала смоделируйте событие windows key + 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();
         }
    });
  }
0 голосов
/ 15 марта 2012

Вам необходимо, чтобы ваше приложение работало в полноэкранном режиме.

посмотрите по этой ссылке Как создать приложение Java Swing, которое покрывает строку заголовка Windows?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...