İnfografik
← Ünite 3
Görsel Programlama 2

Ünite 3: Tablo Tabanlı Veri Gösterimi

Shneiderman'ın Görselleştirme Yaklaşımı
Ben Shneiderman (1996) tarafından önerilen 'önce genel görünüm, sonra filtreleme, sonra detay' yaklaşımı, etkileşimli arayüzlerin temel tasarım prensibidir. Bu ünite, TableView kullanımında bu prensibi temel alarak kullanıcı verimliliğini artırmayı hedefler.
Oracle JavaFX Dokümantasyonu
Ünitedeki tüm teknik yapıların (TableView, TableColumn, CellValueFactory) referans noktası 2018 tarihli Oracle JavaFX 8 API dokümantasyonudur. Bu kaynaklar, bileşenlerin nasıl doğru yapılandırılacağını ve hata yönetimi prensiplerini belirler.
Öğrenci Not Tablosu Uygulaması
Ünite içerisinde geliştirilen örnek uygulama, 1001 numarasından başlayan öğrenci kayıtlarını yönetir. Uygulama; ad, bölüm, not gibi alanları içeren bir model sınıfı ile çalışır ve temel tablo yönetim işlevlerini sergiler.
NetBeans Proje Yapılandırması
Uygulama geliştirme sürecinde 'Unit03_StudentTable' adıyla bir JavaFX Application projesi oluşturulur. Kod düzeni için 'model' ve 'ui' paketleri ayrılarak mimari bir disiplin sağlanır.

Anahtar Kavramlar

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.
FilteredListAna veriyi silmeden, belirli bir koşula göre görünümü daraltan bir liste sarmalayıcısıdır. Örnek: Kullanıcı arama kutusuna 'Bilgisayar' yazdığında sadece o bölümdeki öğrencileri gösterir.
SortedListVerileri belirli bir kritere göre sıralayan ve bu sıralamayı TableView ile eşleyen bir görünüm listesidir. Örnek: 'Not' sütununa tıklandığında notları küçükten büyüğe sıralar.
SelectionModelTablodaki satır seçimlerini yöneten ve seçilen öğeye erişim sağlayan bir yapıdır. Örnek: Silinecek öğrenciyi belirlemek için seçili satırı yakalamaya yarar.
TextFieldTableCellTablo hücrelerini düzenlenebilir bir metin kutusuna dönüştüren hazır bir hücre sınıfıdır. Örnek: Öğrenci adını tablo üzerinde doğrudan değiştirmek için kullanılır.
StringConverterDüzenlenebilir hücrelerdeki metin değerini modeldeki veri tipine (veya tam tersine) dönüştüren bir araçtır. Örnek: TextField'dan gelen metni integer bir nota çevirmek için gereklidir.
Lambda BağlamaJava'da isimsiz fonksiyonlar kullanarak veri bağlamayı daha okunabilir ve güvenli hale getiren bir yöntemdir. Örnek: 'c -> c.getValue().nameProperty()' ifadesi ile sütuna veri aktarımı.

Diğer Önemli Bilgiler

Demo Veri Seti

Uygulamanın çalışması için Ayşe Demir (Bilgisayar, 85), Mehmet Kaya (İşletme, 55), Elif Yıldız (Elektrik, 72) ve Can Arslan (Endüstri, 40) gibi örnek veriler kullanılarak tablo başlangıçta doldurulur.

Sütun Yeniden Boyutlandırma Politikası

Tablo tasarımında kullanılan 'TableView.CONSTRAINED_RESIZE_POLICY', sütunların tablo genişliğine göre otomatik olarak ayarlanmasını sağlayarak arayüzün daha estetik ve düzenli görünmesini sağlar.

Sınavda Dikkat Et

  • 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.
  • Filtreleme ve sıralama yaparken ana listenin (data) silinmediğini, sadece görünümün (FilteredList/SortedList) değiştiğini unutmayın.
  • Düzenlenebilir tablolarda StringConverter kullanmayı ihmal etmeyin; aksi takdirde veriler modele geri dönmez.
  • Seçim işlemlerinde SelectionModel'in önemini kavrayın; silme veya detay gösterme işlemleri her zaman bu model üzerinden yürütülür.
  • Sıralama desteği için SortedList'in comparatorProperty'sini TableView'e bağlamayı (bind) unutmayın, aksi halde başlığa tıklansa da sıralama gerçekleşmez.
  • Hata ayıklarken sütunların boş görünmesinin en yaygın sebebinin PropertyValueFactory'ye yanlış isim verilmesi olduğunu hatırlayın.