본문 바로가기
Programming/JAVA

[JavaFX] JavaFX 폰트 적용하기!

by 두치 Duchi 2020. 5. 26.

간단한 프로젝트(완성도 매우 낮음)를 진행하면서 찾아보고 알아낸 것들을 적어보고자 한다.

javaFX에 대한 자료를 찾아가면서 프로젝트를 진행했어야 했는데.. 한글로 되어있는 자료가 너~무 너~~~~무 없었다..

그래서 javaFX를 공부 하는 분들과, 관심이 있으신 분들이 있을 수도 있으니까.. 복습 겸 한번 올려보도록 하겠다!

(코드가 너무 형편없다고 생각이 들거나, 더 좋은 방법이 있다면 댓글에 남겨주세요~~~~~)

Font Load

javafx에 있는 Font라는 클래스를 사용해서 폰트를 불러오는 방법을 알아보도록! 하게슴니다...

 

// 첫번째
Font.loadFont(Class.forName("yourPakage.YourClass").getResource("./urFont.ttf").toString(), 16);

//두번째
Font.loadFont(getClass().getResource("./urFont.ttf").toString(), 16);

//세번째
Font.loadFont(getClass().getResourceAsStream("./urFont.ttf"), 16)

 

첫번째같은 경우는 아무래도 javafx를 사용해서 프로그램을 작성하면 

실행 가능한 jar파일 이나, exe파일로 만들고싶은 생각이 들 것이다.

실행가능한 jar파일 exe파일로 만들 경우에 getResourceAsStream() 또는 getResource()를 사용하게 되면

예외가 발생하여 실행이 안되거나 폰트를 불러올 수 없을 가능성이 있다.

그래서 첫번째 방법을 추천한다!! (이클립스나 IDE에서 실행하면 셋 다 모두 잘 된다.)

이게 왜 작동을 못하는 건지는... 공부를 더 해봐야겠다. (-- 나중에 공부한 내용도 포스팅해 보겠읍니다~!@(feat.밥테일))

폰트 적용

여하튼! 이렇게 폰트를 불러왔으면

css파일에서 사용해주면 된다. css 문법과 매우 유사해서 어렵진 않다.

#loginPage .label {
	-fx-font-size: 70;
	-fx-text-fill: #d9d9d9;
	-fx-font-family: "Font Family";
}

 

간단히 설명하자면, loginPage라는 id를 가진 녀석의 자식 중에 label 들에게 아래 css문법을 적용하겠다는 소리다.

흔히 사용하는 css와는 살짝 다른 게. labelclass="label"이 아니라 fxml에서의 태그다.

무슨 소리냐면 <Label>은 자바에서는 javafx.scene.control이라는 패키지 안에 있는 Label 클래스라는 소리다.

설명이 이상하지만... 넘어가자

 

그런데 이 폰트 패밀리는 어떻게 알아낼까?

아주! 간단하다!!

String fontFamily = "";
fontFamily = Font.loadFont(Class.forName("yourPakage.YourClass").getResource("./urFont.ttf").toString(), 16).getFamily;

System.out.println(fontFamily);

 

 실행해보면 친절하게 콘솔에 찍어 줄 것이다..


#loginPage {
	-fx-font-family: "배달의민족한나는열한살", "배달의민족", "배민한나", "한나체", 
	BMHANNA, HANNA, 'BM_HANNA', 'HANNA 11yrs old';
}

 

위 코드처럼 하나라도 걸려라 제발ㅜㅜㅜㅜㅜ 하는 마음으로 막 쓰지말고..ㅋㅋㅋㅋㅋ

.getFamily()로 손쉽게 알아내자... (본인은 정말 고장 난 줄 알았다...)

 

한 가지 더 알아두면 좋은 것!

System.setProperty("prism.lcdtext", "false");

 

폰트에 안티앨러싱을 적용한 것처럼 날카로운 부분들을 부드럽게 해주는 코드이다.

무조건 쓰면 좋다기보다, 폰트마다 어울릴 수도 있고 아닐 수도 있으니까 이리저리 잘해보자.

 

이상!

댓글