2015-04-23 4 views
1

Я новичок в ReactFX, и я пытаюсь захватить клавиши CTRL и C, нажатые для типичной операции копирования.ReactFX- Как создать поток для события комбинации клавиш CTRL-C?

Как эффективно захватить этот поток? Это все, что я мог бы получить до сих пор, но она даже не компиляции ...

final EventStream<KeyEvent> keysTyped = EventStreams.eventsOf(myTbl, KeyEvent.KEY_TYPED) 
     .reduceSuccessions((a,b) -> new KeyCodeCombination(a.getCode(),b.getCode()), 500); 
+0

Смотрите также мой комментарий на ответ Джеймса. –

ответ

1

Это работает для меня:

KeyCombination ctrlC = new KeyCodeCombination(KeyCode.C, KeyCombination.SHORTCUT_DOWN); 
    final EventStream<KeyEvent> keysTyped = EventStreams.eventsOf(text, KeyEvent.KEY_PRESSED) 
      // the following line, if uncommented, will limit the frequency 
      // of processing ctrl-C to not more than once every 0.5 seconds 
      // As a side-effect, processing will be delayed by the same amount 
      // .reduceSuccessions((a, b) -> b, Duration.ofMillis(500)) 
      .filter(ctrlC::match); 
    keysTyped.subscribe(event -> System.out.println("Ctrl-C pressed!")); 
+1

Вам даже не нужно 'reduceSuccessions'. Что делает 'reduceSuccessions', так это то, что он игнорирует первый« Ctrl + C », если два из них находятся в пределах 500 мс. На практике это означает, что вы задерживаете 'Ctrl + C' обработку на 500 мс, потому что' reduceSuccessions' придется ждать 500 мс, чтобы увидеть, появляется ли еще один «Ctrl + C» в течение этого интервала. –

+0

Я предполагал, что OP хочет ограничить частоту операции (возможно, преобразование больших объемов данных из «TableView», прежде чем размещать их в буфере обмена, например). Но да, я согласен, что здесь трудно увидеть реалистичный прецедент. –

+0

Рад видеть здесь автора ReactFX. Да, извините, что вводит в заблуждение Джеймса. Я не хотел ограничивать частоту, но, скорее, распознавать клавиши CTRL и C, которые одновременно нажимаются друг на друга. Поэтому я предполагаю, что мне просто нужно удалить 'reduceSuccessions()', если это не обязательно для меня. – tmn