Baskenti Neresi - Java

Programlama dilini öğrenmek için yaptığım projelerden bir diğeri. Python ile yazdığım programın blog postunda Java’da arayüzü olan halini yapacağımı söylemiştim. Yaptığım programın mantığıyla ilgili detayları o blog postunda zaten anlatmıştım. Bu yazıda Java ile yazarken ne tür şeylerle uğraştığımı, öğrendiğimi ve neleri yapamadığımdan bahsedeceğim. Programı yazarken veritabanı için yine SQLite kullandım. Arayüz için Window Builder eklentisinden faydalandım.

Java’da Veritabanı Kullanmak: JDBC

JDBC (Java DataBase Connectivity), kullandığınız veritabanı hangisi olursa olsun ortak bir arayüz imkanı sunuyor. Her veritabanı(MySQL, SQLite, Derby…) için Driver’lar var. Bu driverlar kullanılarak JDBC üzerinden veritabanı ile haberleşiliyor. Uygulamada kullanılacak veritabanına karar verildikten sonra o veritabanı için hazırlanmış bir driver bulmak gerekiyor. Bu driver bir jar dosyası oluyor. Onu bulduktan sonra projeye dahil ediyorsunuz ve kullanmaya başlıyorsunuz.

CLASSPATH

Kullanacağım veritabanına karar verip gerekli driverı bulduktan sonra geriye kullanmak kalıyor. Standart kütüphane dışında classlar, packagelar kullanıldığı zaman derleme aşamasında bunların yerini belirtmeniz gerekiyor. Sistemdeki PATH olayını daha önceden Java ortamını kurarken kullanmıştık. Sistem bir şeyi derleyeceği, çalıştıracağı zaman hangi dizinlere bakması gerektiğini belirtiliyoruz orda. Linux komut satırından scriptlerinizi çalıştırdığınız zaman bu kısım daha belirginleşir, çünkü scriptlerinizi kendi bulundukları dizinler dışında çalıştırabilmeniz için(./scriptname) shell’e baktığı dizinlerde sizin scriptleri bulması için PATH tanımlarsınız. CLASSPATH olayı da Java derleyici için yapılan bir şey. Derleme işi yapılırken kullanılan sınıfları nerede bulacağını söylemek gerekiyor. Bu işi direkt CLASSPATH değişkeni varsa düzenleyerek, yoksa yeniden tanımlayarak yapabiliyoruz. Ancak okuduğum kadarıyla pek doğru bir yaklaşım değil. Yaptığınız şey bir program için sonuç verir, diğer şeyleri bozarmış. Global değişkenleri kullanmak hep kötü, hep pismiş. Onun yerine komut satırından projeye özel classpath tanımlayabiliyoruz. HowTo

GUI in Java

Java arayüz tasarımı Window Builder ile kolay oluyor. Bu kolaylık parçaları bir yerden alıp diğer yere koymak şeklinde bir kolaylık. Sizi yapacağınız arayüzün detayları ve dinamiği hakkında pek fikir vermiyor. Parçaların nasıl ve ne için kullanıldığını bilmek gerekiyor. En çok zorlandığım kısım paneller arasında geçiş yapmak. İlk arayüz projem olan Toolkit’te CardLayoutu kullanmıştım geçişler için. Bu sefer üst tarafta bir menubar ile bunu çözmeye çalıştım. Henüz yaptığım arayüz tasarımları istediğim gibi olmuyor. Layoutlar mesela göründüğü kadar basit değiller. Onları daha detaylı öğrendikçe işler daha da kolaylaşacak gibi geliyor.

Program ekran görüntüleri ve kaynak kodu

Github - Kaynak Kodu

//TODO: [gallery link=“file” ids=“448,449,450,451,452,453”]

Neler Yapılabilir

// Sorulara süre sınırı konulabilir. Her soru için 60 saniye verilir. Geri sayim başlar.

// Yüzde elli hak. Bir ya da bir kaç yüzde elli hak verilir. Kullanıldığında doğru cevap olmayan iki tane seçenek pasifleştirilir.

// Puanlama sistemi geliştirilebilir. Her soru 1 puan şu anda. Her ülke için vtnında puan değeri tutular. Yanlış cevaplanan bir ülkenin puanı bir artırılır. İşin içine bir de süre olayı katılırsa, cevapladığı süreye göre farklı bir yüzdeyle puan çarpılır mesela.

// Exe veya jar dosyası yapmak. Jar dosyasını vt olmayan programlar için yapıyordum sıkıntısız ama vt işin içine girince her yerde çalışmıyor. .Exe ise bambaşka bir olay henüz C programlama dili dışında bir .exe oluşturamadım.

// Ülkelerin ismine göre ekler. “Amerika baskenti neresidir?” saçma oluyor. Ek olmayınca saçma duruyor. Son harflere göre bir ekler dizisi oluşturuluyor. Gelen ülkeye göre diziden gelecek eki bulan bir metot yazılır. Eğlenceli bir şeye benziyor.

// Puan tablosunun gösterildiği kısım biraz daha güzelleştirilebilir. Sayfalama yapılarak tüm sonuçlara ulaşım sağlanabilir. Vt’daki skorlara sıfırlamak için bir buton konulabilir.

Aklıma bunlar geldi. Sizin bir fikriniz,eleştiriniz var mı? İyi kodlamalar.