2015-06-25 3 views
0

Я создал VBox в javafx, который появляется как всплывающее приложение, основанное на комбинации горячих клавиш alt + j. Теперь все, что я хочу сделать, это закрыть VBox, когда я отключаю комбинацию клавиш alt + j. Это мой фрагмент кодаЗаключительный этап по выпуску ключа

final Stage dialog = new Stage(); 
EventHandler handler = new EventHandler<KeyEvent>() 
{ 
    public void handle(KeyEvent event) 
    { 
     if (event.isAltDown() && event.getCode() == KeyCode.J) 
     { 
      dialog.initStyle(StageStyle.UNDECORATED); 
      // dialog.initModality(Modality.APPLICATION_MODAL); 
      VBox dialogVbox = new VBox(25); 
      dialogVbox.getChildren().add(new Text("ABC")); 
      Scene dialogScene = new Scene(dialogVbox, 300, 200); 
      dialog.setScene(dialogScene); 
      dialog.show(); 
     } 
     else if (KeyEvent.KEY_RELEASED.equals(eventRel.isAltDown() && eventRel.getCode() == KeyCode.J)) 
     { 
      dialog.hide(); 
     } 
    } 
}; 

scene.addEventHandler(KeyEvent.KEY_PRESSED, handler); 

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

В соответствии с замечанием я создал отдельный обработчик для ключа выпуска: Это не закрывал VBOX

EventHandler handlerRel = new EventHandler<KeyEvent>() { 
     public void handle(KeyEvent eventRel) { 
     //event.consume(); 


      if(KeyEvent.KEY_RELEASED.equals(eventRel.isAltDown() && eventRel.getCode() == KeyCode.J)) 
       { 
        System.out.println("Inside released"); 
        dialog.hide(); 
       } 


      }};   


    scene.addEventHandler(KeyEvent.KEY_RELEASED, handlerRel); 

Благодарности

+0

Вы только добавил обработчик события 'KeyEvent.KEY_PRESSED' вы также должны добавить (или создать отдельную один для' KeyEvent.KEY_RELEASED'. – Nitram

+0

я что просто увидеть отредактированный код Thanks – Gemcode

+0

Это ' if' во втором обработчике. Я думаю, что вы делаете проверку «равно» на результат проверки кнопки. Значение: не должно ли условие 'if' быть таким же, как в первом обработчике? – Nitram

ответ

1

Вы прикрепляя два обработчика к одной и той же сцене. Однако, как только создается 2-я сцена, а именно dialogScene, она становится активной и является сценой, принимающей события. Поэтому исправление для вашего решения заключается в подключении обработчика события KEY_RELEASED к dialogScene, а не к исходной сцене.

   dialogScene.addEventHandler(KeyEvent.KEY_RELEASED, event -> { 
        if (event.isAltDown() && event.getCode() == KeyCode.J) 
        { 
         dialog.hide(); 
        } 
       }); 
+0

Это хорошее решение. – Gemcode