🏃‍♂️ Hızlı Notlar | JavaFX

JavaFX 12 için hızlı notlar

🧱 Proje Dizin Yapısı

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

👷‍♂️ Dosyaları Yapılandırma

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

jetbrains_project_structures

Kaynak

💨 Hızlı Notlar

  • İ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

📦 JPackage ile Çıkarma

  • İlk olarak buradan JPackage'ı indirmen lazım.

MSPaint adlı yazılım JPackage ile çıkarılmış (?)

Kod Notları

Listeners (Eylem Yönetimi)

Ekranı Taşıma İşlemi

public class Main extends Application {
private double xOffset;
private double yOffset;
@Override
public 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);
}
}

Harici Bağlantılar