[css] JavaFX 프로젝트 구조



Answers

Question

FXML 사운드를 사용하여 JavaFX의 MVC 모델을 만들었지 만 프로젝트 프로젝트를 구성하는 방법을 찾는 데 어려움을 겪고 있습니다.

JavaFX에 대한 하나의 자습서는 너무 간단하고 조직화되지 않은 방법입니다. 간단히 하나의 패키지를 만들고 거기에 모든 것을 만들고 모든 컨트롤러, 모든 fxml 및 모든 CSS를 만듭니다. 나는 그것을 원하지 않는다. 나는 물건이 그들의 올바른 장소에 있기를 바란다.

그래도 JavaFX의 "경로 지정"은 "제한적"인 것처럼 보입니다. URL을 사용하면 리소스를 로컬 파일로 제한하려면 전체 getClass().getResource("foo.fxml").openStream() 작업을 수행해야합니다. 그게 좋겠지 만 클래스 경로에서 리소스를 가져 와서 경로는 클래스가있는 패키지에서 나온 것입니다. 나는 프로젝트의 루트를 좀더 원했습니다. 그건 내 인생을 단순화 하겠지만, JavaFX는 그런 식으로 작동하지 않는 것 같습니다.

실용적인 예를 들어 보겠습니다.

FXML "로그인 화면"이 있다고 가정 해보십시오. 내가 로그인 화면에 스타일 시트를 사용하길 원한다고 가정 해보십시오. 이상적으로, 그 CSS는 그 fxml과 동일한 패키지에있을 것입니다. 그러나 다른 FXML에서 동일한 .css를 사용하려면 어떻게해야합니까? FXML을 같은 패키지에 둘 필요가 있습니까? 분명히 나는 ​​"필요 없다"라고 말하지만, 어떻게해야합니까?

또한, 제대로 로그인 할 때 장면을 바꾸고 싶다고 말할 수 있습니다. FXML Controller의 적절한 이벤트에서 "setScene"을 호출해야합니다. FXML을 다른 패키지에 가지고 있다면 그 경로를 얻기가 어려울 것입니다. 모든 것이 하나의 커다란 패키지에 들어 있거나 모든 것이 "../../dir"과 같은 해킹에 의지하지 않고 접근하기가 어렵습니다.

http://docs.oracle.com/javafx/2/best_practices/jfxpub-best_practices.htm 의 Henley Sales 응용 프로그램은 응용 프로그램이 단일 TabPane 임에도 잘 구성된 응용 프로그램의 예입니다. Unfortunatly (적어도 나는 생각한다) 출처가 열려 있지 않다. 그 아이디어는 다음과 같습니다.

client
  Main.class
  styles.css
      client.images
          image.png
      client.screen1
          Screen1.fxml
          Screen1Controller.java
      client.screen2
          Screen2.fxml
          Screen2Controller.java
      ...

이 행위는 나쁜 시작처럼 보이지만 몇 가지 문제가 있습니다. (또는 적어도 문제가있는 것으로 봅니다.)

'The Henley Sales'의 경우 패키지의 FXML (쉬운 액세스, FXML 디렉토리는 Main 클래스 아래에 있음) 중 하나를 호출하는 Main을 갖는 것이 현명합니다. 여전히 스타일 시트의 경우 scene.getStylesheets().add(...); 로 하드 코드해야합니다 scene.getStylesheets().add(...); . FXML에서 스타일 시트를 선택하는 것을 선호합니다. Afterall, 스타일 시트는 View 구성 요소의 일부입니다. FXML의 URL에서 .css 파일에 액세스하는 것은 디렉토리보다 상위에 있기 때문에이 구조에서 다소 어려울 것입니다.

또한,이 조직과 함께 내가 어떻게 장면을 경쟁력있게 바꾸겠습니까? 이 프로젝트에서는 전체 프로젝트가 단일 TabbedPane이므로 필요하지 않습니다. 메인은 그것을 호출하고 완료합니다. 더 많은 스왑 필요 없음. 그러나 단순한 로그인 장면 (또는 전체 장면을 바꾸어야하는 이유가 무엇이든)은 FXML 경로에 액세스해야 할 필요성을 요구합니다.

그리고 자원이 있습니다. CSS 파일은 이미지를 사용해야 할 수도 있습니다. 그 구조는 .css 파일을 맨 위에 배치하고 .css가 필요로하는 파일을위한 패키지 만 작성함으로써 해결합니다. 특정 FXML이 다른 .css를 갖기를 원한다면 또 다른 문제가 발생할 것입니다.

그것은 마치 한 것처럼 보입니다. CSS는 공유 리소스 폴더에 액세스해야합니다. FXML은 Css에 액세스해야합니다. FXML의 컨트롤러는 다른 FXML에 액세스해야합니다. 나는 나의 프로젝트 구조에 대한 의구심에 대해 분명히했다. JavaFX 프로젝트 구조를 만드는 데 도움이됩니다. 기본보다 많은 기본 응용 프로그램을 만들 정도로 강력하거나 좋은 소스 코드로 리디렉션됩니다.

오, 그나저나 Netbeans를 사용하고 있습니다.




Links