Hem masaüstü hem de web tabanlı uygulamalar geliştirirken, zaman zaman eldeki verilerin görselleştirilmesi yani resim olarak ifade edilmesi ve bu resimler üzerinden de düzenlenebilir olması ihtiyacı ile karşılaşılır. Bu yazıda JAVA bileşenleri ve Graphics sınıfı kullanarak etkileşimli veri görselleştirme konusuna bir giriş yapacağız. Başlangıç olarak basit çizim nesnelerinin yerleştirilebildiği ve bu nesnelerin klavye ve fare aracılığıyla yönetilebildiği bir ekran tasarlayalım.
Öncelikli olarak bu tip uygulamalarda etkileşim için daha sonra rahatça eklemeler yapabilmek için mümkün olduğunca genel bir çerçeve çizerek sınıfları genişletilebilir hazırlamamızda fayda var. Tüm çizim nesnelerini ifade edebilecek bir ata (parent) sınıf yazarak başlayalım.
Ekranımızda çizim yapabileceğimiz bir alana ihtiyacımız olacağı için JPanel sınıfından türeyen (inherit) bir çizim sınıfı oluşturalım.
|
|
İlk çizim nesnemiz dikdörtgen tipinde olsun. Bu tipte nesneleri ifade edecek bir veri tipi (sınıf) yaratalım. Bir önceki adımda yaratmış olduğumuz CizimNesne sınıfımız Dikdortgen sınıfı için temel teşkil edecek.
|
|
Çizim aşamasına geçerken programımızda asla bir CizimNesne’ sinin bulunmayacağını, ekranda görüntülenecek her nesnenin mutlaka CizimNesne’ sinden türemiş bir sınıf tipinde olması gerektiğini bilmemiz gerekiyor. Bu nedenle CizimNesne sınıfımız abstract (soyut) olarak işaretlenmeli ve bu tipte bir obje yaratımına izin verilmemeli. Bu sınıfı abstract yaparken ayrıca her bir çizim nesnesinin mutlaka sahip olması gereken bazı davranışları (fonksiyon) da zorunlu kılabileceğiz.
|
|
Bu şekilde artık Dikdortgen sınıfımızda yazmak zorunda olduğumuz iki fonksiyon elde ettik. İlk fonksiyonumuz ciz fonksiyonu. Kendisine gönderilen grafik nesnesi üzerinden Dikdortgen nesnesini ekrana çizdirecek fonksiyonu tanımlamamız gerekiyor.
|
|
|
|
Anlık olarak çizim ekranımız üzerinde bulunacak çizim nesnelerini tutmak amacıyla bir ArrayList oluşturalım ve eklemek istediğimiz her nesneyi bu ArrayList’e ekleyelim.
|
|
Burada paintComponent metodu Jcomponent sınıfından miras alınan her bir bileşenin ekrandaki görüntüsünün oluşturulması esnasında çalışan fonksiyondur. Bu nedenle, bileşenin çizimi ile ilgili kodlarımızı bu fonksiyona yerleştireceğiz.
Basitçe düşünürsek çizim ekranının oluşturulması için bu fonksiyonda yapmamız gereken tek şey GrafikNesneleri listemizdeki tüm nesnelerinin çizimini yapmak. Bu listedeki tüm nesneler CizimNesne sınıfından türediği için her nesnenin ciz(..) fonksiyonu olduğunu biliyoruz. Dolayısıyla her nesne için bu fonksiyonu çağırmamız yeterli olacak.
|
|
Şimdi ilk ekran çıktımızı alabilmek için bir ana pencere oluşturalım ve elle girdiğimiz bazı dikdortgen nesnelerini ekranda görüntüleyebildiğimizi test edelim.
|
|

Şimdi ekrandaki çizim nesnelerimiz için etkileşimi tasarlayabiliriz.
Şu an için ekrandaki dikdörtgen nesnelerimizin fare ile taşınabilir olmasını sağlayalım. Fare ile taşıma işleminde iki farklı aşama yer alıyor. Öncelikle fare butonuna bastığımız ve çektiğimiz an, bu iki arasında da yani fare tuşuna basılı iken fareyi hareket ettirdiğimiz süre. Bu iki tip durum için kodlama yapmamız gerekiyor. JAVA’ da bu iki işlem için MouseListener ve MouseMotionListener uygulamamız gerekiyor. Fare etkileşimleri çizim alanı üzerinde gerçekleşeceği için bu arayüzleri (interface) Canvas sınıfımızda uygulayacağız.
|
|
Bu değişiklik sınıfımıza şu fonksiyonları eklememizi gerektirir;
|
|
Bunun için Canvas sınıfımıza CizimNesne tipinde bir üye değişken ekleyelim.
|
|
Son olarak, canvas nesnemiz üzerindeki fare olayları için sınıfı yönetici/dinleyici olarak atayalım. Canvas sınıfı yapılandırıcısında bu işlemi yapabiliriz. Canvas sınıfımızın son durumu aşağıdaki gibi olacaktır.
|
|
Bu uygulamaya kendiniz sadece üçgen, daire gibi farklı şekil sınıfları ekleyerek kodların bu sınıflar için de çalışabildiğini göreceksiniz. Bu uygulamada kalıtım ve polimorfizm kavramlarını kullanarak kodları oldukça kısa tuttuk. Yazının ileriki bölümlerinde bu yapı üzerine kuracağımız detaylı çizim ekranlarında da kodlar karmaşıklaşmadığını göreceğiz.
önceki yazı c#'ta dosyayı veritabanı gibi kullanmak |
sonraki yazı Php Uzun kelime ve sağa uzama sorunu |
Çok güzel bir sunuş, teşekkürler.
güzel bir program olmuş hocam elinize sağlık. anladıpım kadarıyla java programına ister metin istersek görsel oalrak tutabiliyoruz süre ayarlarması falanda varmı bunu google reklamlarını içinde uygulanabilir olsa güzel olurdu. google metin yazı reklamları yerine sitede sürekli görsel reklam çıkması harika olurdu. java uygulaması kullanıyor snaırım googlede reklam yayınlarken....
Java işte, baya bi kod amelelii yaptırıyor insana. Girdik biz de java dünyasına çıkış yok :D Yazı için teşekkürler...
Bence harika anlatım...
Lensin kötüsü olmaz..
iklimsa,iklimsa klima,petshop,saç ekimi,ataşehir kiralık,kırtasiye malzemeleri,güncel haberler,vrf,web tasarımataşehir satılık
örsel oalrak tutabiliyoruz süre ayarlarması falanda varmı bunu google reklamlarını içinde uygulanabilir olsa güzel olurdu.
tskler...
Kendinizi özel hissetmek için Kindle ile tanışmalısınız>>What is Amazon Kindle
siemens servisi ariston servisi miele servisi gaggenau servisi mitsubishi klima servisi ferroli servis ferroli servisleri indesit servisi indesit servisleri
çok güzel teşekkürler
Çok faydalı bilgiler emeği olan herkese teşşekürler
güzel anlatım için teşekkürler
gerçekten faydalı bilgiler
java ile içli dışlı olanlar için zengin içerikli bir makale olmuş, elinize sağlık.
güzell
teşekkürler, güzel paylaşım.
Yazı için teşekkürler, faydalı oldu..
pillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.
Nokta ve pilli ortak yapımı olan kodaman.org kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.