포커스가있는 경우 TextArea
에서 arrow key
청취자를 해제 할 수 있습니까? 나는 공간의 텍스트보다 더 많은 텍스트가있을 때 스크롤 펜을 움직이는 것에 주로 매달리고있다. 나는 이것을 피하려고 노력하고있다.JavaFX 텍스트 리스너
제안 해 주셔서 감사합니다.
포커스가있는 경우 TextArea
에서 arrow key
청취자를 해제 할 수 있습니까? 나는 공간의 텍스트보다 더 많은 텍스트가있을 때 스크롤 펜을 움직이는 것에 주로 매달리고있다. 나는 이것을 피하려고 노력하고있다.JavaFX 텍스트 리스너
제안 해 주셔서 감사합니다.
이벤트 필터를 사용할 수 있습니다. 필터는 이벤트 처리의 이벤트 캡처 단계 (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 comment에 관해서, this answer 상태 :
스크롤 막대를 제어하기위한 행동이 내부적으로 (자바 8 대중 자바 FX API의 일부가 아닌)에 TextAreaSkin 코딩된다. TextAreaSkin을 복사하거나 서브 클래 싱하여 동작을 사용자 정의한 다음 attach your customized skin to your node을 사용자 정의 할 수 있습니다. 이것은 실제로 원하는 방식으로 내부 제어 동작을 사용자 정의하는 "적절한"방법입니다.
정확하게는 아닙니다. 나는 TextArea에서 scrollpane을 화살표로 움직이는 특정 청취자를 끄고 싶지만 그들과 함께 내 onKeyPressed 이벤트를 갖고 싶습니다. 지금 당장은 JavaFX Api에서 나 자신이 구현 한 액션이 있습니다. 요점은 두 번째 것을 끄는 것입니다. 나는 그것이 지금 더 분명하기를 바란다. – Saris
@Saris 명확한 답변을 주셔서 감사합니다. – beatngu13
'if (textArea.isFocused())'가 중복되었습니다. 포커스가 맞지 않으면 텍스트 영역에서 키 이벤트가 실행되지 않습니다. @Saris 이것이 왜 당신이 원하는 것을하지 않는지는 명확하지 않습니다. 'if (isArrowKey)'블록에 자신의 기능을 추가하기 만하면됩니다. –