티스토리 뷰

개발/뻘짓 기록물

JavaFX 삽질기록(3)

기억고양이 2023. 1. 16. 22:30
반응형

JavaFX 화면을 추가하면서 삽질했던 기록들.

내용을 좀 더 이해하려면, JavaFX 기반 프로젝트를 딱 생성만 해보는것이 좋다. 어떻게 동작하는지 바로 이해할 수 있었다.

좌측은 class, 우측은 FXML파일이다. 기본프로젝트만 만들어봐도 대충 어떻게 매핑되어 동작하는지 감이 온다.

HTML과 JavaScript를 다뤄봤다면 쉽게 이해할 수 있는 형태다. JavaFX는 함수 대신 메소드가 매핑되는 느낌인것 같다.

어쨌든 여긴 잘 됐을때의 결과물이고 삽질한 기록을 하나하나 써보려고 한다.


FXML 어노테이션에 대한 의존성이 없어 임포트를 할 수가 없었다.

FXML 빨간줄 지우기부터 시작..

IntelliJ에서 종속성 추가하는 기능을 찾을 수 있었다.

사실 여기서 추가를 눌러도 잘 안됐었다.

조금 지나니 임포트가 됐었다.

...왜 되는거여? Gradle 새로고침을 했던가? 딱히 라이브러리를 새로 받는 과정을 보진 못했다..

어쨌든 라이브러리에 javafx-fxml 라이브러리가 있기만 하면 gradle 새로고침으로 잘 받아 올 수 있을것이다.


기본 프로젝트 생성시 javaFX를 선택하면 fxml파일이 새로 만들어지는데, 내 프로젝트에 그대로 복붙했다. 그리고 onAction이랑 컨트롤러를 내 프로젝트에 맞게 바꿨다.

 

기본 프로젝트 토대로 버튼이 뜨게 소스를 바꿨다.

FXMLLoader fxmlLoader = new FXMLLoader(ParserApplication.class.getResource("hello-view.fxml"));
        Scene scene = new Scene(fxmlLoader.load(), 640, 480);

음...무슨 오류였는지 정확히 기억은 안나는데... 디버깅을 해보니 getResource 의 결과가 계속 null로 찍혀서 실행이 안됐었다. 나중에 오류내용을 정확히 확인해보니 다음과 같았다.

"Caused by: java.lang.IllegalStateException: Location is not set"

결국 저 리소스 파일을 찾을 수 없어 발생하는 오류였다.


이 이후로 한 시간을 헤맸던거 같다. 절대 경로로 지정하면 잘 찾아왔었지만... 기본 JavaFX 프로젝트는 상대경로 지정인게 이상했다.

절대 경로를 지정해줘야만 리소스를 찾아왔었다.

그래서 좀 찾아보니 다음과 같은 글을 찾을 수 있었다.

https://stackoverflow.com/questions/19602727/how-to-reference-javafx-fxml-files-in-resource-folder
첫번째 답변중 3번, JAVA 클래스 위치랑 동일한 경로에 넣으라고 한다.

Resource 경로 = Java 클래스 경로명과 위치를 똑같이 맞춰주니 잘 찾아온다.

예를 들어 ParserApplication의 패키지가

"com.text.abc.ParserApplication"에 있으면 얘를 떙겨쓸 fxml 파일 경로도 "com.text.abc.MainUI.fxml"

이런식으로 되어야 한다는 소리다.

나는 "com.text.abc.ParserApplication" || "com.text.fxtest.MainUI.fxml"

이렇게 구성되어 있어서 안됐었다.


사실 이렇게 기본적인 세팅에서 해방되니 이후는 순조롭게 진행되서 더 쓸 내용이 없다.

그저 클래스에다가 Label, TextArea 등등을 선언해서 알맞게 세팅하고, FXML에 끼워넣으면 되는거 였다. 자바를 조금 공부했었으면 금방 파악하고 쓸 수 있는 구조인것 같았다.

웹스퀘어랑 비슷한거 같기도 하고...

좀 까다로운건 UI를 어떻게 꾸미냐..는거였는데 SceneBuilder라고 UI를 컴포넌트 단위로 수정할 수 있는 툴이 있었다.

링크 : https://gluonhq.com/products/scene-builder/#download

뭐 어쨌든 화면이 복잡하진 않으니 대충 사람이 쓸정도로만 구성하고....
이런 저런 코드를 줄줄 써내려갔다.

변환 전의 TextArea를 긁어 Class를 태운 다음, 그 결과를 변환결과에 찍어주는 프로그램이다.

뒷단은 예전에 작업한게 있어서, 내가 원하는 결과물이 매우 잘 나왔었다.

 

이제 이놈을 실행가능한 jar파일로 만들면 되는데

음.

음......

욕을 쓰면 안되는데

난관이 또 있더라.

그건 다음에 쓰고싶다 안해요 안해ㅑ


(변환할려면 툴이 또 필요하댄다) (도대체 몇개를 깔은거야) (너는 왜 오류가 나는건데?)

 

그럼 안뇽!

반응형