Resim eşleme (tekden açmalı, uymayan ikiliye 3 saniye cezalı)



Bu programın NetBeans proje dizini (.rar).

Çalıştırılabilir program (.jar). Bu Jar dosyası hem appleti göstermek için kullanıldı, hem de tek başına çalıştırılabilir. İçine bakarsanız (WinRar, WinZip vs. ile) hem JApplet class'ının hem de JFrame class'ının olduğunu görürsünüz. İçindeki MANIFEST.MF dosyasında main class olarak JFrame'in adı belirtilmiş. Applet paketi olarak kullanmak için (bu sayfada olduğu gibi) sayfanın HTML kodunda JApplet dosyasının adını kullanmak lazım.

Dosya isimlerinde türkçe harfler kullanmanın KÖTÜ bir fikir olduğunu burada görebiliriz; NetBeans Jar dosyasının içinde UTF-8 (türkçe harfler için 2 byte) kullanırken HTML sayfasında (örneğin bu Html sayfası) ANSI kullanmak gerekebilir. Ayrıca Jar dosyasını açarken localization ya da JRE kurulum ayarlarına göre problem de çıkabilir. Bu meseleyi düşünmemek için dosya isimlerinde türkçe harflerden kaçınmak en kestirme çözüm.

myImageIcons.java : Resimlerden ImageIcon'ları oluşturmak için. Her resimden bir icon yaratıp bir ArrayList'e ikişer tane atılıyor. Sonra Random olarak listeden çıkarılıp, buttonlara konmak üzere bir array'a konuluyor. Random bir sıralama yapmak için örnek bir yol.
BaşlaBit.java : Basit ActionListener örneği. Kontrol paneli Listener yaratıp bir BaşlaBit nesnesine ekliyor. Resim paneli (myPanel.java) tüm resimler eşlendiğinde bu nesnenin bitti metodu ile kontrol panelinin Listener'ını uyandırıyor (actionPerformed() ). Pratikte kontrol panelinin zamanı tutması için kullanıldı.
myPanel.java : Resimlerin tutulduğu panel. Akla ilk gelenden farklı olarak JToggleButton kullanıldı. İki fazlı bu buton çeşidi sayesinde butona bağlı icon'u her basışda değiştirmek gerekmedi. Programın akışını daha kolay kontrol etmek için bazı field'ler tanımlandı (solved[], açık, ilkaçıkButtIndex ...)
Ayrıca bir Timer kullanım örneği var. Saniyede bir atan timer tick'lerini sayılıyor. Bu Timer'ı hem myPanel hem de kontrolPanel aynı anda dinliyor! setInitialDelay(10) ile timer başladığında (10 msec sonra:) bir tick atmasının sebebi kontrol panelini haberdar etmek için (ilk kırmızı dikdörtgen yansın diye).
kontrolPanel.java : myPaneli kullanıyor, altına Reset butonu, zaman tutucu (Reset ile başlıyor), ve ceza süresi progress kutuları koyuyor. Kırmızı kutuları yakıp söndürme hilesi: text'i olmayan JLabel, opacity true/false değiştir (repaint() et ki değişiklik gözüksün). Zaman tutarken Date ve getTime() örneği. İki ActionListener'ı var, biri timer'a biri başlabit nesnesine bağlanıyor.