Ders Raporu
← Görsel Programlama 2
Ders Raporu

Görsel Programlama 2

Açıköğretim Fakültesi » Bilgisayar Programcılığı Önlisans Programı » Atatürk Üniversitesi ATA AÖF · 14 ünite

Konu Özeti

Ünite 1: Javafx ile Uygulama Geliştirmeye Geçiş

JavaFX uygulamaları geliştirirken NetBeans IDE üzerinde 'Java with Ant' kategorisi altında bulunan 'JavaFX Application' şablonu tercih edilmektedir. Bu şablon, uygulamanın temel iskeletini standart bir yapıda sunarak geliştiricinin hızlı bir başlangıç yapmasını sağlar. Ancak, JDK 11 ve sonraki sürümlerde JavaFX'in JDK paketinden ayrılması nedeniyle, bu şablonun NetBeans üzerinde görünürlüğü veya çalışabilirliği kullanılan JDK sürümüne bağlı olarak farklılık gösterebilir.

Ünite 2: Gelişmiş Arayüz Bileşenleri

JavaFX uygulamalarında arayüzün statik bir ekran olmaktan çıkıp etkileşimli bir yapıya dönüşmesinin temelinde, veri ile arayüz arasındaki senkronizasyonu sağlayan ObservableList yapısı yatar. Bu liste, klasik Java koleksiyonlarından farklı olarak, içeriğinde bir değişiklik (ekleme, silme, güncelleme) meydana geldiğinde bu durumu dinleyicilerine (listeners) otomatik olarak bildiren 'olay güdümlü' bir mekanizmaya sahiptir. Geliştirici, FXCollections.observableArrayList() metodunu kullanarak bir liste oluşturduğunda, bu listeyi ListView veya ComboBox gibi bileşenlerin 'items' özelliğine bağlar.

Ünite 3: Tablo Tabanlı Veri Gösterimi

TableView, JavaFX içerisinde çok sütunlu ve satırlı verileri düzenli bir şekilde göstermek için kullanılan en güçlü arayüz bileşenidir. ListView gibi tek boyutlu listelerin aksine, TableView bir kaydın farklı özelliklerini (örneğin öğrenci numarası, adı, notu) yan yana sütunlarda göstererek kullanıcıya çok boyutlu bir okuma ve karşılaştırma imkânı sunar. Tablonun temel yapısı üç ana sınıftan oluşur: TableView (tablonun kendisi ve veri taşıyıcısı), TableColumn (sütun tanımları ve veri eşleme) ve TableCell (hücrelerin çizimi ve düzenlenmesi).

Ünite 4: Çok Sayfalı Arayüz ve Uygulama Akışı

Çok sayfalı arayüz kavramı, modern masaüstü ve mobil uygulamalarda kullanıcıya tek bir ekran yerine, belirli bir mantık çerçevesinde yapılandırılmış birden fazla ekran sunulmasıdır. Bu yaklaşımın temel amacı, kullanıcıyı gereksiz karmaşadan uzaklaştırarak uygulama içinde sezgisel bir yolculuk sunmaktır. Tek pencere – çok ekran yaklaşımı, uygulamanın sabit bir ana pencere üzerinde çalışmasını ve içeriklerin bu pencere içinde değişmesini esas alır.

Ünite 5: Arayüz Tanımlama Yaklaşımları

Kullanıcı arayüzü, bir yazılımın estetik bir unsuru olmanın ötesinde, sistem ile kullanıcı arasındaki etkileşimi yöneten kritik bir katmandır. JavaFX ortamında arayüz geliştirirken verilen ilk karar, bu arayüzün nasıl tanımlanacağıdır. Bu karar, uygulamanın okunabilirliği, bakım kolaylığı ve geliştirme hızı üzerinde doğrudan belirleyici bir etkiye sahiptir.

Ünite 6: FXML ile Arayüz Tasarımı

JavaFX uygulamalarında arayüz tasarımı ile iş mantığının (business logic) iç içe geçmesi, kodun okunabilirliğini ve sürdürülebilirliğini zorlaştıran bir durumdur. FXML (FXML Markup Language), bu sorunu çözmek için geliştirilmiş, XML tabanlı deklaratif bir işaretleme dilidir. FXML'in temel amacı, arayüz bileşenlerini Java kodundan ayırarak 'ayrık sorumluluklar' ilkesini desteklemektir.

Ünite 7: Scenebuılder ile Sürükle–Bırak Tasarım ve Hızlı Prototipleme

Grafiksel Kullanıcı Arayüzü (GUI), kullanıcıların bilgisayar programlarıyla metin tabanlı komutlar yerine görsel öğeler (butonlar, menüler, metin kutuları) aracılığıyla etkileşime girmesini sağlayan sistemdir. Modern yazılım dünyasında kullanıcı deneyimi (UX) kritik bir başarı faktörü olduğundan, GUI tasarımı yazılım geliştirme sürecinin ayrılmaz bir parçası haline gelmiştir. JavaFX, Java diliyle modern ve görsel açıdan zengin masaüstü uygulamaları geliştirmek için kullanılan bir kütüphanedir.

Ünite 8: Form Tabanlı Uygulamalar ve Girdi Doğrulama

Form tabanlı uygulamalar, kullanıcı ile sistem arasındaki veri alışverişini sağlayan arayüz yapılarıdır. Bir kayıt ekranı, giriş paneli veya bilgi güncelleme sayfası bu yapıların en yaygın örnekleridir. Temel amacı, kullanıcıdan düzenli ve anlamlı veri toplamak, bu verileri işlemek ve sistemin kararlı çalışmasını sağlamaktır.

Ünite 9: Dosya Tabanlı Veri İşleme

Programlar çalışma anında verileri RAM üzerinde tutar; ancak uygulama sonlandığında bu veriler kaybolur. Dosya tabanlı veri işleme, bu geçici yapıyı kalıcı (persistent) hale getirmek için kullanılır. Verinin program dışında saklanması, farklı sistemler arasında veri paylaşımına ve büyük verilerin sistematik yönetimine olanak tanır.

Ünite 10: Veri Tabanı Destekli Javafx Uygulamaları

JavaFX, modern masaüstü uygulamaları geliştirmek için kullanılan, Swing'e kıyasla daha esnek, CSS desteği sunan ve donanım hızlandırmalı bir grafik arayüz kütüphanesidir. Uygulama mimarisi 'Stage' (pencere) ve 'Scene' (sahne) kavramları üzerine kuruludur. Her Stage bir Scene içerir ve bu sahne, 'Scene Graph' adı verilen hiyerarşik bir ağaç yapısında düzenlenmiş düğümlerden (Node) oluşur.

Ünite 11: Grafik ve Veri Görselleştirme

Veri görselleştirme, nicel ve nitel verilerin görsel temsiller aracılığıyla anlamlandırılması sürecidir. Dijital çağda verinin stratejik bir karar destek aracı haline gelmesiyle, karmaşık veri kümelerindeki örüntüleri, eğilimleri ve aykırı değerleri hızlıca fark etmek zorunlu hale gelmiştir. İnsan beyni, sayısal listeler yerine görsel ipuçlarını (renk, uzamsal ilişki, şekil) çok daha hızlı işlediği için görselleştirme bilişsel yükü azaltan kritik bir araçtır.

Ünite 12: Stil Verme ve Arayüz Tasarımı

JavaFX uygulamalarında arayüz tasarımı, görsel sunumun kod tabanından ayrılmasıyla daha yönetilebilir hale gelir. CSS (Cascading Style Sheets), bu ayrımı sağlayan temel araçtır. Bir CSS kuralı üç ana bileşenden oluşur: Seçici (hangi bileşenin hedefleneceği), Özellik (hangi niteliğin değişeceği) ve Değer (neliğin nasıl görüneceği).

Ünite 13: Küçük Ölçekli Uygulama Geliştirme

Yazılım geliştirme süreci, kod yazmaya başlamadan önce yapılan planlama ile başlar. Planlama aşaması, toplam proje süresinin yaklaşık %20-30'unu kapsar ve bu süreç atlandığında gereksinim belirsizliği, hatalı kodlama ve tutarsızlıklar gibi ciddi sorunlar ortaya çıkar. Kişisel Bütçe Takip Uygulaması, kullanıcıların gelir ve giderlerini yönetebileceği, verileri kalıcı olarak saklayabileceği ve grafiksel analizler yapabileceği bir masaüstü yazılımıdır.

Ünite 14: Javafx ile Güncel ve Sürdürülebilir Uygulamalar

Masaüstü uygulamaları, web ve mobil teknolojilerin yükselişine rağmen yazılım ekosisteminde kritik bir öneme sahiptir. Bu uygulamalar, özellikle yüksek işlem gücü gerektiren, yerel dosya sistemleriyle yoğun etkileşime giren ve çevrimdışı çalışma yeteneği beklenen senaryolarda rakipsizdir. Donanım kaynaklarına doğrudan erişim ve düşük gecikme süreleri, masaüstü yazılımları kurumsal iç sistemler ve mühendislik çözümleri için vazgeçilmez kılar.

Öne Çıkan Kavramlar

StageJavaFX uygulamasının en üst düzey kapsayıcısıdır, yani uygulamanın penceresidir. Her JavaFX uygulaması bir 'primaryStage' ile başlar.
SceneSahne grafiğindeki tüm görsel öğelerin (Node) yerleştirildiği içerik alanıdır. Bir Stage içinde tek bir Scene aktif olabilir.
NodeJavaFX arayüzündeki tüm görsel bileşenlerin (Button, Label, VBox vb.) temel sınıfıdır. Sahne grafiği, bu düğümlerin hiyerarşik yapısından oluşur.
JavaFX Application ThreadArayüzün güncellenmesinden ve kullanıcı etkileşimlerinin işlenmesinden sorumlu olan özel iş parçacığıdır. Tüm UI değişiklikleri bu iş parçacığında yapılmalıdır.
init()Uygulama başlatıldığında, arayüz gösterilmeden önce çalışan ve gerekli hazırlıkların yapıldığı yaşam döngüsü metodudur.
start()JavaFX uygulamasının ana giriş noktasıdır; arayüzün kurulduğu, bileşenlerin sahneye eklendiği ve pencerenin gösterildiği metottur.
stop()Uygulama kapatılırken çalışan, kaynakların serbest bırakılması ve temizlik işlemlerinin yapıldığı yaşam döngüsü metodudur.
Platform.exit()Uygulamanın kontrollü bir şekilde sonlandırılmasını sağlayan ve stop() metodunun devreye girmesine olanak tanıyan komuttur.
ObservableVeri üzerindeki değişikliklerin izlenmesini sağlayan ve bu değişiklikleri arayüze otomatik bildiren bir yapıdır. Örnek olarak ObservableList, bir listeye eleman eklendiğinde arayüzü günceller.
Sahne Grafiği (Scene Graph)JavaFX'te arayüz bileşenlerinin hiyerarşik bir ağaç yapısında düzenlenmesidir. Stage, Scene ve içindeki tüm Node'lar bu yapıyı oluşturur.
ObservableListİçeriğinde değişiklik olduğunda dinleyicilerine otomatik bildirim gönderen, JavaFX arayüz bileşenlerinin veri kaynağı olarak kullanılan özel bir liste yapısıdır. Örneğin, bir ListView'e bağlı ObservableList'ten bir öğe silindiğinde, arayüz otomatik olarak güncellenir.
SelectionModelListView gibi bileşenlerde kullanıcının seçim davranışlarını yöneten ve izleyen soyut yapıdır. getSelectionModel() ile erişilir ve seçili öğe, indeks veya çoklu seçim modunun yönetilmesini sağlar.
ToggleGroupBirden fazla RadioButton'ı bir araya getirerek, gruptan sadece birinin seçili kalmasını sağlayan mantıksal bir yapıdır. Kullanıcı yeni bir RadioButton seçtiğinde, diğerleri otomatik olarak seçimi bırakır.
Direct ManipulationKullanıcının arayüzdeki nesneler üzerinde doğrudan işlem yapması ve sistemin bu eylemlere anında geri bildirim vermesidir. Örneğin, bir öğeye sağ tıklayıp 'Sil' demek doğrudan manipülasyondur.
Indeterminate StateCheckBox bileşeninin sahip olduğu, seçili veya seçili değil durumlarının dışında 'belirsiz' veya 'karışık' durumu ifade eden üçüncü bir durumdur.
SpinnerValueFactorySpinner bileşeninin sayısal değer üretim kurallarını (aralık, adım miktarı vb.) belirleyen ve arayüz ile mantığı birbirinden ayıran modeldir.
ContextMenuKullanıcının bir bileşen üzerinde sağ tıkladığında açılan, bağlama duyarlı eylemler (MenuItem) içeren bir popup menüsüdür. Arayüzü sade tutmak için kullanılır.
Listener (Dinleyici)Bir özellikte veya veri yapısında meydana gelen değişiklikleri yakalayan ve buna bağlı bir kod bloğunu çalıştıran mekanizmadır. Örneğin, selectedItemProperty() bir listener ile izlenerek seçim değişikliği yakalanır.
CellFactoryListView gibi listelerin hücrelerinin nasıl görüntüleneceğini (metin, ikon, buton vb.) özelleştirmeye yarayan yapıdır. Listelerin görsel zenginliğini artırır.
Event-Driven ProgrammingProgramın akışının kullanıcı eylemleri veya sistem olayları tarafından belirlendiği bir programlama yaklaşımıdır. JavaFX uygulamaları bu mantıkla çalışır.
ObservableListVeri değişikliklerini izleyen ve bu değişiklikleri otomatik olarak arayüze bildiren gözlemlenebilir bir liste yapısıdır. Örnek: Tabloya yeni bir öğrenci eklendiğinde, bu listenin güncellenmesi tablonun da anında güncellenmesini sağlar.
CellValueFactoryBir sütunun modeldeki hangi veriyi göstereceğini belirleyen bir Callback mekanizmasıdır. Örnek: Öğrenci notunu 'Not' sütununa bağlamak için kullanılır.
PropertyValueFactorySütun verilerini property ismi üzerinden otomatik eşleyen bir kolaylaştırıcı sınıftır. Örnek: 'no' adında bir property varsa, bu sınıf ile sütuna hızlıca bağlanabilir.
PredicateFiltreleme işlemlerinde kullanılan ve öğenin listelenip listelenmeyeceğine karar veren bir mantıksal kuraldır. Örnek: Arama kutusuna yazılan metni içeren öğrencileri filtrelemek için kullanılır.

Sınavda Dikkat Et

  • Yaşam döngüsü sırasını (init-start-stop) ezberleyin; sınavda bu sıralama mutlaka sorulur.
  • Arayüz güncellemelerinin 'JavaFX Application Thread' üzerinde yapılması gerektiğini unutmayın, bu en kritik teknik kuraldır.
  • JDK 11 sonrası JavaFX'in JDK'den ayrıldığını ve bunun NetBeans şablonlarını etkilediğini aklınızda tutun.
  • Paketleme yapısında 'model-service-ui' ayrımının neden yapıldığını (kod yığılmasını önlemek) bilin.
  • Platform.exit() komutunun sadece uygulamayı kapatmadığını, aynı zamanda stop() metodunu tetikleyerek güvenli çıkış sağladığını hatırlayın.
  • ObservableList'in sadece bir veri tutucu değil, arayüzü güncelleyen bir 'olay kaynağı' olduğunu unutmayın.
  • ToggleGroup'un RadioButton'lar için otomatik bir 'tek seçim' kuralı uyguladığını, kodla if-else yazmanıza gerek kalmadığını hatırlayın.
  • Spinner ile Slider arasındaki farkı 'hassasiyet' üzerinden kodlayın: Spinner hassas, Slider sezgiseldir.
  • ContextMenu'nün bir 'bağlam' (context) gerektirdiğini, yani genellikle bir öğe seçiliyken anlam kazandığını unutmayın.
  • Çoklu seçim modunun varsayılan olarak kapalı (SINGLE) olduğunu, MULTIPLE moduna geçişin manuel yapılması gerektiğini bilin.
  • Seçim modelinin (selection model) veri katmanından (items) ayrı bir yapı olduğunu, bu ayrımın hata payını düşürdüğünü aklınızda tutun.
  • CellValueFactory ile PropertyValueFactory arasındaki farkı iyi öğrenin; biri esnek lambda kullanımı, diğeri ise hızlı ama hata riski olan reflection tabanlı bir yöntemdir.