JavaFX'in FXML seslerini kullanarak MVC Modeli harika ve harika görünüyor ancak proje paketlerimi nasıl düzenleyeceğimi bulmakta zorlanıyorum.JavaFX Proje Yapısı
i JavaFX ile ilgili bulmak her bir öğretici yol çok basit ve örgütsüzdür: Onlar sadece BİR paketi oluşturmak ve orada her şeyi yaratmak, her kontrolör, her fxml, her css. Bunu istemiyorum. Ben şeylerin doğru yerlerinde olmasını istiyorum.
Yine JavaFX yönettiği "pathing" "limitive" ... görünüyor. URL'lerin kullanımı, kaynaklarımı yerel dosyalarla sınırlamak istiyorsam,getClass().getResource("foo.fxml").openStream()
öğesinin tamamını yapmam gerekiyor. Bu harika, ama bir sınıf yolundan kaynak elde ederek, yol sınıfın içinde bulunduğu paketten. Projenin kökünü istedim. Bu benim hayatımı kolaylaştıracaktı, ama JavaFX böyle çalışmıyor.
Bir FXML "Giriş Ekranı" sahip düşünün:
pratik bir örnek almak sağlar. Giriş Ekranı'nın bir stil sayfasını kullanmasını istiyorum. İdeal olarak, bu css bu fxml'nin aynı paketinde olurdu. Ama aynı .css'i başka bir FXML'de kullanmak istersem ne olur? Bu, her iki FXML'i aynı pakete koymam gerektiği anlamına mı geliyor? Açıkçası ben "gerek yok", ama nasıl yaparım?
Ayrıca, düzgün bir şekilde giriş yaptığımda sahneyi değiştirmek istediğimi söyleyebilirim. FXML Denetleyici doğru olayında, bir "setScene" çağırmak zorunda kalacaktım. FXML'lerin farklı paketlerde olması durumunda bu yolun elde edilmesi de zor olacaktır. Sadece her şey bir dev şişirilmiş paket içinde ya da "../../dir" gibi kesmelere başvurmadan erişilmesi zor bir şey gibi görünüyor. uygulama, tek TabPane olmasına rağmen
http://docs.oracle.com/javafx/2/best_practices/jfxpub-best_practices.htm Henley satış uygulaması, iyi organize uygulamanın bir örnek olarak görünmektedir. Talihsizce (en azından sanırım) kaynak açık değil. Onun fikri böyle bir şey olur:
client Main.class styles.css client.images image.png client.screen1 Screen1.fxml Screen1Controller.java client.screen2 Screen2.fxml Screen2Controller.java ...
Bu kötü bir başlangıç gibi görünüyor doenst, ancak birkaç sorun vardır (ya da en azından ben sorunlar olarak onları bakınız). 'Henley Satış' için
Onun paketlerin FXML birini çağırır bir Main olması akıllı (kolay erişim, FXML en dizinleri Ana sınıfından altındadır). Yine de, stil sayfası için, bu scene.getStylesheets().add(...);
tarafından kodlanmış olması gerekir. FXML'de stil sayfamı seçmeyi tercih ederim. Afterall, stil sayfası Görünüm bileşeninin bir parçasıdır. FXML'lerdeki bir URL'den .css dosyasına erişilmesi, bu dizinde yukarıda belirtilen dizinlerden beri zor olabilir.
Ayrıca, bu kuruluşla, sahneyi nasıl hassas bir şekilde değiştirebilirim? Bu projede, bu gerekli değildir çünkü tüm proje tek bir TabbedPane'dir. Ana çağırıyor ve bitti. Daha fazla takasa gerek yok. Ancak sahnede basit bir Oturum (veya birisinin tüm sahneyi değiştirmek için gerekenin nedeni ne olursa olsun) FXML yollarına erişme ihtiyacını gerektiriyor.
Ve kaynaklar var. Css dosyalarının görüntüleri kullanması gerekebilir. Bu yapı, .css dosyasını üstüne yerleştirerek ve sadece .css'nin ihtiyaç duyabileceği dosyalar için bir paket oluşturarak çözer. Belirli bir FXML'nin farklı bir .css olmasını istemiş olsaydım, başka bir sorun gelirdi.
Bir döngü gibi görünüyor. Css'nin paylaşılan bir kaynak klasörüne erişmesi gerekiyor. FXML'nin Css'ye erişmesi gerekiyor. FXML denetleyicilerinin diğer FXML'lere erişmesi gerekir. Umarım proje yapılarım hakkında şüphelerim vardı. Lütfen, temelden daha fazla bir uygulama için yeterince güçlü olan veya beni iyi bir kaynak koduna yönlendiren bir JavaFX proje yapısı oluşturmama yardımcı olun.
Ah, Netbeans'ı bu arada kullanıyorum.
Hmm bu ilginç görünüyor, css bir FXML'deki bir URL'den ulaşılması zor gibi görünse de (biraz rahatsız ettiğim ../ şeyi yapmadığım sürece ...). Kaynakları, görüş paketinden sonra koyabiliyordum. Kaynaklar, Görüşün bir parçası olduğu için mantıklı. Servis ve DAO'nun ne için olduğunu bilmiyorum, bana bir örnek verebilir misin? (Oluşturulacak uygulama, veri almak ve saklamak için bir MySQL sunucusu kullanıyor) – Xkynar
Daha fazla netlik için cevabımı güncelledim! – ItachiUchiha
Bu yaklaşımın dezavantajı, görünüm ve denetleyicilerin aynı dizinde bulunmaması ve SceneBuilder'in bunları bağlayamamasıdır. ScreenBuilder gerektirmezse, fxml'i kaynak klasörüne koyardım. – ChrLipp