当焦点有arrow key
时,是否可以关闭TextArea
个侦听器。当文本多于区域中的空间时,我主要想要移动滚动窗格。我试图避免这种情况。
感谢您的建议。
答案 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()
方法停止事件的进一步传播。因此,不会触发(键事件)侦听器。但这也会禁用导航箭头键的能力 - 这真的是你想要的吗?
编辑:
控制滚动条的行为在TextAreaSkin内部编码(在Java 8中不是公共JavaFX API的一部分)。您可以复制或子类化TextAreaSkin以自定义其行为,然后attach your customized skin to your node。这实际上是以您希望的方式自定义内部控制行为的“正确”方式。