<$BlogRSDURL$>

SwingX 

Java masaüstü uygulamalarınızda kullandığınız JFC / Swing bileşenlerinin modern kullanıcı arayüzleri oluşturmaya yetmediği, yeni bileşenlere ihtiyaç duyulduğu malum. Bu boşluğu doldurmak için çalışan bir çok grup ve dolayısı ile üründe bulunmakta. Bu ürünlerden L2FProd'un Common Components'inden daha önce bahsetmiştik. SwingX de aynı amaçla yola çıkmış bir başka proje.

Bu projenin hedefi, Swing bileşen kütüphanesinde yer almayan, modern kullanıcı arayüzünün sahip olması gereken görsel bileşenleri oluşturmak ve hali hazırdaki swing bileşenlerinin özelliklerini geliştirmek.

Bu hedefe varmak için gereken bütün bileşenleri yeniden yazmak yerine hali hazırda yazılmış bulunan bileşenleri bir araya getirmek öncelikli tercih. Bu noktada L2FProd'un geliştiricisi Frédéric Lavigne'in de projeye destek verenlerden olduğunu belirtmek isterim*. Özellikle L2FProd bileşenleri ile benzerlik gösteren bileşenlere ekler yapmak hedefinde.



Şu an da proje kapsamında bulunan bileşenler ise şunlar :


Java 5 ve üzerinde çalışan SwingX kütüphanesi LGPL lisansı ile dağıtılmaktadır.

XStream 

Java nesnelerinin değerlerini serileştirme işlemi ( serialization ) ile saklayabilir ve aynı şekilde geri okuyabiliriz. Bu da bize o nesnelerin değerlerini kalıcı hale getirmek ve taşımak için olanak sağlar. Fakat doğrudan java'nın yöntemlerini kullandığımızda oluşacak olan veri ikili olacak, okunurluğu ve taşınabilirliği ile ilgili sorunlar çıkacaktır. Fakat bu saklama işlemi XML dosyalara yapılırlarsa sadece Java nesneleri arasında değil diğer teknolojiler arasında da taşınabilir olacaklar, düz metin olarak kesinlikle okunur olacaklardır.

XML dosyalarına nesne saklama işlemi için kullanılabilecek çeşitli yöntemler bulunmakta. Kendi yazacağınız küçük kod parçaları ilk aklımıza gelen. Bunun dışında XMLEncoder JavaBean'ler için kullanılabilir. Apache XMLBeans kütüphaneleri kullanılarak java nesneleri ile XML teknolojileri ve verileri arasında daha güçlü bağlar sağlanabilir.

XStream'in bütün bu alternatifler karşısında bize sunduğu ise, basit ve anlaşılır bir arayüz ile POJO'ları XML dosyalara yazması ve okumasıdır. XStream bir veri bağdaştırma ( binding ) değil, bir serileştirme ( serialization ) kütüphanesidir.

Her hangi bir nesneyi XStream kullanarak XML'e dönüştürmek için 2 satır kod yeterlidir. Bir nesneyi XML olarak yazmak için xstream.toXML( obj ) ve geri okumak için xstream.toXML( xml ) fonsiyonlarını kullanmak yeterlidir.

XStream sitesinde daha detaylı halini bulabileceğiniz iki dakikalık kılavuz'da verilen örneği tekrarlarsak :

class Person {
private String name;
// ...
}

XStream xstream = new XStream();

Person hakan = new Person("Hakan Uygun");
String xml = xstream.toXML( hakan );

Person yeniHakan = xstream.fromXML( xml );

XStream bu kolay kullanımının yanında daha detaylı işlemler gerektiğinde araya girilip eklenmesini sağlayacak yapıyıda barındırmaktadır. Örneğin, istediğiniz DOM parser kütüphanesini kullanabilirsiz. Verilerinizin XML'le çevrim standartlarını değiştirmek için kendi çeviricilerinizi yazabilirsiniz.

Özellikle küçük uygulamalarda veri saklamak ve taşımak için çok kullanışlı olan XStream, Sun JDK 1.4 ve üzeri için ek yetenekleri olmakla birlikte, Java 1.3 ve üzerinde çalışmaktadır.

Joe Walnes, Mauro Talevi, Jason van Zyl, Nat Pryce, Dan North tarafından geliştirilen XStream, BSD lisansı ile Codehouse tarafından yayınlanmaktadır.

Java ve Sayfa Düzeni III 

FormLayout

Masaüstü uygulamalarının büyük bir kesimini veri giriş formları oluşturmaktadır. Uygulama içerisinde tutarlı, birbirine benzer bir veri giriş yapısı kurmak programcıdan kullanıcıya kadar herkes için işleri kolaylaştırcaktır. Programcılar açısından, bu formların temel yapısının bir kere belirlenmesi ve uygulama formlarından bağımsız, merkezi olarak geliştirilmesi, veri giriş formu hazırlamayı ve daha sonra yapılabilecek değişiklikleri kolaylaştıracaktır. Kullanıcılar açısından ise öğrenme sürecini kısaltacaktır.

"Mümkün olanı kolaylaştırmak, imkansız olanı mümkün kılmak". Bu temellerden yola çıkarak hazırlanan FormLayout'un temel hedefi form hazırlamayı kolaylaştıracak araçları sunmak. FormLayout da tıpkı GridLayout ve GridBagLayout gibi formu belirlediğiniz ızgaraya böler ve verilen görsel bileşenleri bu ızgara üzerine yerleştirir. Izgarayı belirlemek diğerleri gibi bir fonksiyon seti kullanılafrak yağılabileceği gibi, FormLayout'a has bir dil ile de belirtilebilir.

Bir başka önemli özelliği de mantıksal birim sisteidir. Picel ya da santim gibi fiziksel birimler yerine Dialog Unit ( dlu ) olarak adlandırılan mantıksal birim kullanılır. Bu birim, sistem özellikleri ve font büyüklükleri kullanılarak hesaplanır. Böylece hazırlamış olduğunuz form farklı ortam ve çözünürlüklerde tasarlamış olduğunuz şekle uygun orantılarla sunulur.

Formunuzun büyüklüğünün değişiminin bileşenleriniz üzerine olacak olan etkisini de belirleye bilirsiniz. Hatta satır ve sutun gruplarının bir birleriyle orantılı olarak değişimlerini sağlaya bilirsiniz.


...

PanelBuilder pb = new PanelBuilder( new FormLayout( "default:grow(0.30),2dlu,default:grow(0.70)",
"default,2dlu," + //Row1
"fill:default:grow,2dlu," + //row2
"default,3dlu" //row3
) );

CellConstraints cc = new CellConstraints();

pb.setBorder( Borders.createEmptyBorder( "4dlu,4dlu,4dlu,4dlu" ));

pb.add( tbSelect, cc.xywh( 1, 1, 3, 3 ));

pb.add( cbColumns, cc.xy( 1, 5 ));
pb.add( Utils.buildButtonEdit( tfSearch, btnSearch ), cc.xy( 3, 5 ));

JPanel p = return pb.getPanel();
...



FormLayout, form tasarımlarınızın merkezi olarak geliştirlmesi için çeşitli Builder ve Factory'ler sunmaktadır. Ayrıca tasarım deseni olarakta, bu yolun izlenmesi önerilmektedir. Yani sizin uygulamanız içerisinde yer alacak olan formlar yapılarını belirleyip, bu formları üretebilecek genel sınıflar hazırlamanız.

Bu işlemi kolaylaştırmak için de gerekli olan araçları içermektedir. Belirlenmiş olan ızgara üzerine doğrudan yerleştirme yerine bu işlemi otomatik olarak gerçekleştirecek fonksiyonları kullanarak, form yapılandırıcınızın ızgaradan bağımsız olarak çalışabilmesini sağlayabilirsiniz...

JGoodies Forms, Karsten Lentzsch tarafından geliştirilmiştir ve BSD lisansı ile yayınlanmaktadır.

Cevze, Java yazılım geliştirme ortamı ile ilgili konuları içeren bir Hakan Uygun weblogudur. Yapımında Blogger-Templates'den şablon kullanımıştır. Ayrıca Cezve resmi de mehmetefendi.com'dan alınmıştır.