파이썬은 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 살레시오

댓글을 달아 주세요

  RichTextFX.CodeArea에 css 를 적용하기 위해서는 다음과 같은 절차를 따른다.


먼저 프로젝트에 css파일을 생성하고 다음과 같이 작성한다.


.code-area {
   -fx-font-family: monospace;     //폰트
   -fx-font-size: 20;              // 폰트사이즈
   -fx-background-color: #272822;  //배경색
}

.code-area .text { //.code-area 와 .text 사이에 반드시 공백이 있어야 한다.
   -fx-fill: #FFFFFF;             // 문자 색상
}

.caret {
   -fx-stroke:white;              // 캐럿 색상
}

그리고 CodeArea 객체를 다음과 같이 생성하여 설정한다. 여기서 프로젝트의 이름은 Espy_Harper 라고 가정하고 css파일 이름은 caREPL.css 라고 가정한다.


caREPL = new CodeArea();
caREPL.setWrapText(true); // text-wrapping 설정
String stylesheet =
     Espy_Harper.class.getResource("caREPL.css").toExternalForm();
caREPL.getStylesheets().add(stylesheet);

주) 파란색은 프로젝트 이름, 빨간색은 css파일의 이름이다.


이렇게 하면 css에서 지정한 폰트, 배경색, 문자색, 캐럿 색상으로 설정된다.


c{espy}n{espy002}



Posted by 살레시오

댓글을 달아 주세요