JavaFX için önerilen dizin yapısı aşağıdaki gibidir. (kaynak)
Çalışmaları gruplandırmak için com/yemreak/myproject
yapısı kullanılmakta
Maven veya gradle yapısı olarak da geçmektedir
controllers
, FXML dosyalarını kontrol eden kodlar
services
, Harici hizmetler (veya tüm hizmetler)
Eğer çok fazla hizmet varsa, yerel hizmetleri farklı dizine alabilirsin
utility
, Dahili hizmetler
resources
, Tüm kod dışı kaynaklar (images, css, html vs.)
views
, FXML tasarımları
src/main├──java/com/yemreak/myproject (ya da sadece myproject)├── controllers├──Screen1controller.java├──Screen2controller.java├── services├──Service1.java├── applications├── SaveProducts.java├──resources├──views├──screen1.fxml├──screen2.fxml├──css├──style.css├──images├──img1.jpg├──img2.jpg
Örnek olacak proje için buraya bakabilirsin
Dizinleri IDE üzerinden yapılandırak daha verimli çalışabilirsin.
Project Structure
- Project Settings
- Modules
Source
sekmesinden src/res
dizinini Resources
olarak tanıt
out
, lib
ve res
dosyalarını Excluded
olarak tanıt
Kaynak
İlk önce Controller
clasına ekle sonra Scene Builder
tarafında fx:id
'ye eşle
drive.png
okunmuyor ama google_drive.png
okunuyor
Refactor ile ismi yenilenirse de düzeliyor
Resimlerin herbiri src dizinininin altında olmalı
Üst üste tasarımlar için tasarım yapacağın paneli Hierarchy
kısmından en alta alırsan, diğerlerinin üstüne gelir ve karışmaz
Ya da visible değerini false
yaparsın
En alta alınan program çalıştığında ilk görülendir
İlk olarak buradan JPackage'ı indirmen lazım.
MSPaint adlı yazılım JPackage ile çıkarılmış (?)
public class Main extends Application {private double xOffset;private double yOffset;@Overridepublic void start(Stage primaryStage) throws Exception{Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));primaryStage.setTitle("Hello World");primaryStage.setScene(new Scene(root));primaryStage.show();root.setOnMousePressed(mouseEvent -> {xOffset = mouseEvent.getSceneX();yOffset = mouseEvent.getSceneY();});root.setOnMouseDragged(mouseEvent -> {primaryStage.setX(mouseEvent.getScreenX() - xOffset);primaryStage.setY(mouseEvent.getScreenY() - yOffset);});}public static void main(String[] args) {launch(args);}}