【问题标题】:ReactFX- How do I create a stream for CTRL-C key combination event?ReactFX-如何为 CTRL-C 组合键事件创建流?
【发布时间】:2023-04-07 21:44:01
【问题描述】:

我是 ReactFX 的新手,我正在尝试捕获为典型的复制操作而按下的 CTRL 和 C 键。

如何有效地将其捕获到流中?到目前为止,这就是我所能得到的,但它甚至没有编译......

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

【问题讨论】:

  • 另见我对詹姆斯回答的评论。

标签: java javafx javafx-8 reactfx


【解决方案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!"));

【讨论】:

  • 你甚至不需要reduceSuccessionsreduceSuccessions 所做的是,如果其中两个在 500 毫秒内到达,它会忽略第一个 Ctrl+C。实际上,这意味着您将 Ctrl+C 处理延迟 500 毫秒,因为 reduceSuccessions 必须等待 500 毫秒才能查看另一个 Ctrl+C 是否在该时间间隔内到达。
  • 我假设 OP 想要限制操作的频率(例如,可能在将 TableView 中的大量数据放在剪贴板上之前对其进行转换)。但是,是的,我同意在这里很难看到一个现实的用例。
  • 很高兴在这里看到 ReactFX 作者。是的,很抱歉误导了詹姆斯。我不想限制频率,而是想识别CTRLC 键同时被一个接一个地连续按下。所以我猜我只需要删除reduceSuccessions(),如果我不需要的话。
  • @ThomasN。 JavaFX 中的KeyEvent 已经包含Ctrl 是否也被按下的信息,因此您无需使用 ReactFX 重新发明此逻辑。
猜你喜欢
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 2018-10-13
  • 2011-06-03
相关资源
最近更新 更多