일반적으로 폰트를 적용 할때에는 SceneBuilder에서 컴포넌트 속성의 font항목을 이용하여 폰트를 변경하게 됩니다. 하지만 이렇게 폰트를 적용하는 경우에는 선택한 컴포넌트에만 적용이 될뿐만 아니라, 다른 PC에서 실행하는 경우, 적용한 폰트가 없는 경우에는 글씨가 깨져서 보이는 현상이 있을 수 있습니다.
SceneBuilder에서 폰트를 변경한 경우 FXML파일에는 아래와 같이 작성이 됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" stylesheets="@../css/styles.css" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/11.0.1" fx:controller="javafxappfont.FXMLDocumentController">
<children>
<Button fx:id="button" layoutX="126" layoutY="90" onAction="#handleButtonAction" text="Click Me!" />
<Label fx:id="label" layoutX="57.0" layoutY="125.0" minHeight="16" minWidth="69">
<font>
<Font name="NanumGothic" size="12.0" />
</font></Label>
</children>
</AnchorPane>
일괄적으로 button, label 등등 컴포넌트에 폰트 적용 및 PC에 설치되지 않는 폰트를 적용시에는 CSS파일을 작성하여 font-family 속성을 사용하는것이 좋습니다. 다음의 방법이 css파일로 폰트를 적용하는 방법입니다.
넷빈즈 8.2 버전에서 기본 프로젝트를 활용하여 JavaFX에서 폰트를 적용하도록 하겠습니다. 프로젝트 생성 후, css패키지, resources패키지를 만든 후 각각의 패키지의 style.css 파일과, 폰트파일을 위치합니다.
style.css
.label {
-fx-font-size: 14pt;
-fx-font-family: "NanumGothic"; /* NanumSquare */
}
JavaFXAppFont.java
package javafxappfont;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class JavaFXAppFont extends Application {
@Override
public void start(Stage stage) throws Exception {
Font.loadFont(getClass().getResourceAsStream("/resources/NanumSquareR.ttf"), 10);
Font.loadFont(getClass().getResourceAsStream("/resources/NanumGothic.ttf"), 10);
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
fxml 파일의 css파일 적용
적용 결과
기본 폰트(적용 전, CSS파일의 폰트 크기만 적용)
나눔 고딕 폰트 적용
나눔 스퀘어 폰트 적용
폰트는 적용이 되었으나, 폰트가 부드럽게 보이지 않고, 깨져서 보이고 있습니다. 폰트가 깨져보이는 경우 안티앨리어싱을 적용해야 합니다. 그렇기 위해서는 자바 코드를 아래와 같이 수정이 필요합니다.
JavaFXAppFont.java
package javafxappfont;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class JavaFXAppFont extends Application {
@Override
public void start(Stage stage) throws Exception {
/**
* 안티앨리어싱 적용(폰트를 부드럽게)
*/
System.setProperty("prism.lcdtext", "false"); // 폰트파일 로드전에 실행
Font.loadFont(getClass().getResourceAsStream("/resources/NanumSquareR.ttf"), 10);
Font.loadFont(getClass().getResourceAsStream("/resources/NanumGothic.ttf"), 10);
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
System.setProperty("prism.lcdtext", "false"); 코드를 추가하여 실행한 결과입니다.
기본 폰트 (폰트 적용 전, CSS파일의 폰트 사이즈만 적용)
나눔 고딕 폰트 적용
나눔 스퀘어 폰트 적용
기본 폰트, 나눔 고딕의 경우, 큰 차이가 없지만, 나눔 스퀘어 폰트의 경우 상당히 달라진것을 확인 할 수 있습니다.
참고 사이트
JavaFX8: How to shut down anti-aliasing on text?
'Java | JavaFX' 카테고리의 다른 글
넷빈즈 11.2, OpenJDK 13, JavaFX 개발환경 설정 (0) | 2019.12.25 |
---|---|
JavaFX 개발 환경 설정(넷빈즈 8.2, 오라클 JDK 1.8, Scene Builder) (0) | 2019.12.25 |
JavaFX 애플리케이션(프로그램) 아이콘 설정하기 (0) | 2019.12.25 |
JavaFX 로그인, 회원가입 줌아웃, 줌인 화면효과주기 예제 (0) | 2019.12.25 |
넷빈즈 프로젝트 외부 라이브러리(jar) 등록하는 방법 (0) | 2019.12.25 |