JavaFX textarea监听器

时间:2017-01-07 23:46:04

标签: javafx keylistener arrow-keys

当焦点有arrow key时,是否可以关闭TextArea个侦听器。当文本多于区域中的空间时,我主要想要移动滚动窗格。我试图避免这种情况。

感谢您的建议。

1 个答案:

答案 0 :(得分:2)

您可以使用事件过滤器。过滤器在事件处理的事件捕获阶段(第1个,在场景图下方)接收事件,而在事件冒泡阶段(第2个,在场景图上方)触发处理程序。看看这个片段:

TextArea textArea = new TextArea();
textArea.addEventFilter(KeyEvent.ANY, event -> {
    KeyCode code = event.getCode();
    boolean isArrowKey = code == KeyCode.UP || code == KeyCode.RIGHT
            || code == KeyCode.DOWN || code == KeyCode.LEFT;
    if (isArrowKey) {
        event.consume();
    }
});

consume()方法停止事件的进一步传播。因此,不会触发(键事件)侦听器。但这也会禁用导航箭头键的能力 - 这真的是你想要的吗?

关于your commentthis answer州的

编辑

  

控制滚动条的行为在TextAreaSkin内部编码(在Java 8中不是公共JavaFX API的一部分)。您可以复制或子类化TextAreaSkin以自定义其行为,然后attach your customized skin to your node。这实际上是以您希望的方式自定义内部控制行为的“正确”方式。