'setonkeypressed'에 해당되는 글 1건

  1. 2016.09.29 java에서 키입력 시 addEventFilter, addEventListener 차이점

  파이썬은 tab키를 보통 네 개의 공백문자로 치환하여 표시한다. richtextfx 라이브러리의 CodeArea 에서 이것을 수행하려면 다음 중 하나를 사용해야 한다.


codeArea.addEventFilter(KeyEvent.KEY_PRESSED, (keyEvent) -> {
   if (keyEvent.getCode() == KeyCode.TAB) {
       codeArea.insertText(codeArea.getCaretPosition(), "    ");
       keyEvent.consume();
   }
});

아래의 두 개는 동작 방식이 유사하다.


codeArea.addEventHandler(KeyEvent.KEY_PRESSED, (keyEvent) -> {
   if (keyEvent.getCode() == KeyCode.TAB) {
       codeArea.insertText(codeArea.getCaretPosition(), "    ");
       keyEvent.consume();
   }
});

codeArea.setOnKeyPressed( (keyEvent) -> {
   if (keyEvent.getCode() == KeyCode.TAB) {
       codeArea.insertText(codeArea.getCaretPosition(), "    ");
       keyEvent.consume();
   }
});

이들 중 가장 첫 번째 방법은 키입력이 처리되지 전에 람다함수가 호출되어 keyEvent.consume() 함수가 듣는다. 즉, tab키를 누르면 tab문자가 입력되기 전에 람다함수가 호출되고 그 안에서 consume() 되므로 결과적으로 공백문자들(4개)만 입력된다. 따라서 이 방법을 사용해야 한다.


 하지만 그 다음 두 개는 키입력이 된 다음에 람다함수가 호출된다. 따라서 consume()함수는 호출하나 마나이다. 이 경우 tab키를 누르면 먼저 입력창에 tab 문자가 입력되고 그 뒤에 공백문자들이 붙는다.


c{espy}n{004}


Posted by 살레시오
,