2016-09-05 3 views
2

Я создал следующую функцию для того, чтобы закрыть любой всплывал Stage в моей программе:Закрыть Этап с кнопкой выхода в JavaFX

public void escapeKeyPressed(final KeyEvent keyEvent , Stage diolog) { 
     if (keyEvent.getCode() == KeyCode.ESCAPE) { 
      diolog.close(); 
     } 
    } 

Тогда у меня есть интерактивное изображение, где можно щелкнул и форма появится:

Проблема в том, что я вызываю функцию, которую я получаю за первый аргумент. Вот как я это называю;)

escapeKeyPressed(KeyCode.ESCAPE ,dialog); 

знает ли тело, как я могу это исправить?

ответ

3

Ваша подпись метода (final KeyEvent keyEvent, Stage diolog), и вы передаете KeyCode в качестве первого аргумента, который не является KeyEvent.

Вы можете передать оригинальную KeyEvent вместо того, чтобы выполнить свою подпись как:

yourPopUp.setOnKeyPressed((KeyEvent event) -> escapeKeyPressed(event, dialog)); 

Но было бы гораздо чище, если бы обновить сигнатуру метода, чтобы принять KeyCode непосредственно:

public void escapeKeyPressed(KeyCode keyCode , Stage diolog) { 
    if (keyCode == KeyCode.ESCAPE) 
     diolog.close(); 
} 

В этом случае вы можете иметь первоначальный вызов как:

escapeKeyPressed(KeyCode.ESCAPE, dialog); 
+0

Я пробовал более чистую версию;), и я больше не получаю синтаксическую ошибку, но как только сцена появляется в секунду, она автоматически закрывается и не ждет, когда я нажму кнопку escape: D –

+0

Поскольку этот вопрос был о проблеме с вызовом вашей функции, и на этот вопрос был дан ответ, я бы предложил задать другой вопрос с помощью [Минимального, полного и проверяемого примера] (http://stackoverflow.com/help/mcve) (например, код для одного из ваших изображений), где фактическая функциональность вашего слушателя может быть исправлена ​​:) – DVarga

Смежные вопросы