2017-02-14 6 views
0

У меня возникла проблема с тем, что у меня возникли проблемы с поиском решения. Я получил событие HTMLeditor, который определяет, когда нажата клавиша, но мне нужно, чтобы создать слушатель, чтобы проверить, если текст HTMLeditor был изменен, и я пришел с этим:Текст JavaEX HTMLEditor изменен за 5 секунд

htmlEditor.setOnKeyPressed((keyEvent) ->{ 
          if(keyEvent.getCode().isDigitKey() || keyEvent.getCode().isLetterKey() || 
          keyEvent.getCode().isModifierKey() || keyEvent.getCode().isWhitespaceKey() || 
          keyEvent.isShiftDown()){ 
           handleWhoTypes(null);  
          } 
         }); 

         PauseTransition timer = new PauseTransition(Duration.seconds(5)); 
         htmlEditor.textProperty().addListener((obs, oldText, newText) -> 
          timer.playFromStart()); 
         timer.setOnFinished(e -> handleIsPaused(null)); 
     } 

Но это не будет работать, потому что у htmlEditor нет textProperty(), и я не могу думать о другом решении. Заранее спасибо.

ответ

1

Похоже, вам придется опрашивать текст редактора:

Runnable textMonitor = new Runnable() { 
    private String previousText; 

    @Override 
    public void run() { 
     String newText = htmlEditor.getHtmlText(); 
     boolean changed = !newText.equals(previousText); 

     previousText = newText; 

     if (changed) { 
      timer.playFromStart(); 
     } 
    } 
}; 

BooleanBinding windowShowing = Bindings.selectBoolean(
    htmlEditor.sceneProperty(), "window", "showing"); 
windowShowing.addListener(
    new ChangeListener<Boolean>() { 
     private ScheduledExecutorService executor; 

     @Override 
     public void changed(ObservableValue<? extends Boolean> o, 
          Boolean old, 
          Boolean showing) { 
      if (showing) { 
       executor = Executors.newSingleThreadScheduledExecutor(); 
       executor.scheduleWithFixedDelay(
        () -> Platform.runLater(textMonitor), 
        1, 1, TimeUnit.SECONDS); 
      } else { 
       executor.shutdown(); 
      } 
     } 
    }); 
+0

Право, я буду текст его завтра. Но там одна вещь отсутствует, как я могу вызвать метод handleIsPaused(), когда эти 5 секунд закончились? –

+0

Вы можете вызвать 'timer.setOnFinished' в любом месте. Вышеупомянутый код касается только запуска анимации. – VGR

+0

Это не сработало. После его завершения он должен перейти к другому методу, но он никогда не входит в него. –

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