JavaFX 8u40 버전에 간단한 대화창/경고창 클래스들이 추가되었다.(참조) 예를 들어 경고창은 다음과 같이 간단히 생성할 수 있다.


Alert alert = new Alert(AlertType.WARNING);
alert.setTitle("Warning Dialog");
alert.setHeaderText("Look, a Warning Dialog");
alert.setContentText("Careful with the next step!");

alert.showAndWait();


동일한 Alert객체로 확인창도 생성할 수 있다.


Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("Confirmation Dialog");
alert.setHeaderText("Look, a Confirmation Dialog");
alert.setContentText("Are you ok with this?");

Optional<ButtonType> result = alert.showAndWait();
if (result.get() == ButtonType.OK){
   // ... user chose OK
} else {
   // ... user chose CANCEL or closed the dialog
}


또는 간단한 문자열 입력기도 다음과 같이 간단히 생성하여 문자열을 입력받아 후처리를 할 수 있다.


TextInputDialog dialog = new TextInputDialog("walter");
dialog.setTitle("Text Input Dialog");
dialog.setHeaderText("Look, a Text Input Dialog");
dialog.setContentText("Please enter your name:");

result.ifPresent(name -> System.out.println("Your name: " + name));


 이전에는 이런 간단한 기능도 별도로 구현하기가 까다로웠는데 이제는 쉽게 할 수 있다.

n{espy}n{005}


Posted by 살레시오
,

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

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


 먼저 github 페이지에 가서 richtextfx-fat-0.x.jar 라이브러리를 다운받는다. ( 반드시 -fat- 버전이어야 한다. 이것이 아니면 compile할 때 오류가 발생한다.) 이 포스트를 작성할 때 최신버전이 0.7-M2 였다. 따라서 richtextfx-fat-0.7-M2.jar 파일을 다운로드 받는다.


 그 다음 netbeans를 실행하여 javaFX FXML Application 을 생성한다. 이 프로젝트는 Scene Builder를 이용하여 UI를 구성할 수 있다.


생성된 프로젝트의 Libraries를 우클릭한 후 [Add Jar/Foler...] 를 선택하여 다운로드 받은 jar 파일을 추가시킨다.



FXMLDocController.java 파일에서 다음과 같이 AnchorPane 객체를 추가한다.


SceneBuilder 의 AnchorPane 에 이 id를 지정해 준다.


그 다음 AnchorPane 객체와 CodeArea 객체를 import 한다.


import javafx.scene.layout.AnchorPane;
import org.fxmisc.richtext.CodeArea;

그리고 FXMLDocController 클래스의 initialize() 메소드에 다음과 같이 추가한다.



실행 결과는 다음과 같다.



이것으로 javaFX 의 AnchorPane 에 CodeArea를 붙이는 것을 해 보았다.


c{espy}n{jv016}


Posted by 살레시오
,