<$BlogRSDURL$>

Java ve Sayfa Düzeni II 

java.awt.GridBagLayout
Bir önceki yazıda temel döşeme sınıflarından bahsetmiştik. Bu döşeme yöntemleri basit olmakla beraber, görsel bileşenleri belli bir sıra ve boyutlarla döşemekteydiler. Sayfa üzerine yerleştirilecek olan bileşenleri hep aynı sıra ve boyutlarda yerleştirmek sanırım olası en kötü tasarımı ve aynı zamanda da en kullanışsız kullanıcı arayüzünü elde etmenizi sağlıyacaktır. Bu duruma çözüm olarak daha gelişmiş fakat kodlaması diğerlerinden biraz daha karmaşık döşeme yöntemleri geliştirilmiştir.

GridLayout'un daha gelişmiş biçmidir. Döşeme yöneticisine bileşeni verirken, bileşenin nasıl bir döşeme kuralıyla yerleştirileceğide söylenir. Böylece bir bileşen ızgara üzerinde bir den fazla hücre kullanarak yerleştirilebilir.

Bir bileşenin ızgara üzerinde nereye ve nasıl yerleşeceğinin bilgisi kısıt nesnesi ( GridBagLayoutConstraints ) ile bildirilir. Dolayısı ile her bileşen için onu ilgilendiren ayrı bir kısıt nesnesini de üretmelisiniz.

JPanel panel = new JPanel();
GridBagLayout gbl = new GridBagLayout();
panel.setLayout( gbl );

Jbutton button = new JButton();

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 1;
gbl.setConstraints( button, gbc );
panel.add( button );

Burada esnekliği sağlayan kısıt nesnesinin aldığı parametrelerdir.



GridBagConstraints.gridx ve GridBagConstraints.gridy
Bileşenin ızgara üzerinde hangi hücreye yerleşeğini belirtir. Izgaranın sol üst köşesi için değerler : girdx = 0, gridy = 0 dır. Eğer bu değerlere GridBagConstraints.RELATIVE atarsanız, sıradaki bir sonraki hücreye geçecektir.

GridBagConstraints.gridwidth ve GridBagConstraints.gridheight
Bileşenin ızgara üzerinde ne kadar yer kaplayacağını belirtir. Verilecek olan tam sayı değerler kaç hücre kaplayacağını söyler. Eğer bu değerlere GridBagConstraints.REMAINDER atanırsa son bileşen olduğunu belirtir ve geriye kalan hücreleri kaplamasını sağlar ( Button9 ve Button10 ), GridBagConstraints.RELATIVE atanır ise son bileşeen kadar olan alanı kaplamasını sağlar ( Button6 ).

GridBagConstraints.fill
Bileşenin bahsi geçen hücreleri, döşeme kurallarını dikkate almak üzere nasıl dolduracağını belirtir. GridBagConstraints.NONE hücreleri doldurmamasını, GridBagConstraints.HORIZANTAL, GridBagConstraints.VERTICAL, belirtilen yönlerde tamamen doldurmasını, GridBagConstraints.BOTH tüm hücre alanlarını doldurmasını sağlar.

GridBagConstraints.ipadx ve GridBagConstraints.ipady
Bileşenin hücre içinde alacağı alacağı minimum büyüklüğe eklenecek olan tampon büyüklüğü belirtir.

GridBagConstraints.insets
Bileşenin hücrenin sınırlarıyle arasında kalacak olan tampon büyüklüğü belirtir.

GridBagConstraints.anchor
Eğer bileşen hücre içini doldurmuyor ise hangi posizyonda duracağını belirtmek için kullanılır. Alabileceği değerler GridBagConstraints.NORTH, GridBagConstraints.WEST gibi GridBagConstraints içinde sabitler olarak belirlenmiştir.

GridBagConstraints.weigthx ve GridBagConstraints.weigthy
Birden fazla bileşenin değerlendirmesi yapılırken öncelik belirtmek için kullanılır.

GrigBagLayout kullanımı hakkında daha fazla bilgi için The Java AWT: GridBagLayout ve GridBagLayout API dokümanlarına bakılabilir.

Java ve Sayfa Düzeni 

Eğer grafik kullanıcı arayüzü ( GUI ) geliştiriyorsanız, hangi progamlama dili ya da görsel kütüphaneyi kullanırsanız kullanın, görsel bileşenlerininizin sunum penceresi üzerinde yerleşimini bir şekilde belirlemeniz gerekmektedir. Bu problemin iki parçasından ilki olan görsel tasarım, tasarlanan formun genel yapısınının nasıl olacağı, hangi genel kuralların uygulacağı, hangi renk paleti, hangi ikon setinin kullanılacağı gibi soruları kapsar ve genel olarak grafik tasarımcıların işidir. Ayrıca tartışılabilecek bir konu olmakla beraber bu yazının kapsamı dışındadır. Diğeri ise bu karar verilmiş görsel yolun nasıl gerçekleştirileceğidir.

Delphi, VB ve benzeri RAD araçlarını kullanımı sırasında izlenen genel yöntem, bileşeni sürükleyip form üzerinde istediğiniz bir yere koymanız ve gerekli yükseklik genişlik ayarlarını yapıp bırakmaktır. Bu şekilde gerçekleştirilen formların görsel tasarım kurallarına uyup uymadığı, örneğin formun genişliği değiştiğinde otomatik olarak görsel bileşenlerin yeniden bu duruma uyum sağlayıp sağlamadığı ayrıca kontrol edilmeleri, kodlanmaları gerekir.

Java ise bu sorunu Yerleşim Yöneticileri ( Layout Manager ) tanımlayarak çözme yoluna gitmiştir. Taşıyıcı bileşeninize, taşıdığı bileşenleri nasıl yerleştirmesi gerektiğini tanımlayan bu sınıflar, programcının ayrıca kodlama yapmasını gerektirmeden eklenen bileşenleri kendi kural sistemine göre düzenliyecektir.

Örneğin genel tararım içerisinde formun üst kenarında araç çubuğu, alt kenarında durum çubuğu, sol kenarında ağaç menü, ve geri kalanında ise bir tablo olması gerektiğini düşünüyorsanız, yapmanız gereken BorderLayout kullanmak ve panelinize gereken bileşenleri eklerken BorderLayout üzerindeki yerlerini söylemeniz yeterli olacaktır. Formunuzun konum ve büyüklüğü değiştiğinde BorderLayout bundan haberdar olacak ve kontrolü altındaki bileşenleride bu duruma gere yeniden konumlandıracaktır.

Java AWT ve Swing kütüphaneleri kendi içerisinde bütünleşik yerleşim yöneticileri ile gelmekle beraber isterseniz, kendinizinkini yazabilir ya da yazılmış yöneticilerden istediğiniz birini kullanabilirsiniz.

FlowLayout
Üzerine eklenen bileşenleri soldan sağa doğru sıralar. Eğer aynı sıraya sığdıramaz ise ikinci bir satır oluşturur. Genelde bir panel üzerindeki düğmeleri sıralamak için kullanılır.

Panel p = new Panel();
p.setLayout( new FlowLayout());
p.add( new Button("Tamam"));
p.add( new Button("Vazgeç"));

BorderLayout
Bir taşıyıcının kenarlarını tanımlar. Kuzey, Güney, Doğu, Batı ve Merkez olmak üzere beş bölgesi bulunur ve bileşeleri belirtilen bölgeye yerleştirir.

Panel p = new Panel();
p.setLayout( new BorderLayout());
p.add( new Button("Tamam"), BorderLayout.NORTH );
p.add( new TextArea(), BorderLayout.CENTER );


CardLayout
İçerdiği bileşenleri bir seferde sadece birinin görünür kılan bir yerleşim yöneticisidir. Bileşenler birer anahtar değerle eklenirler ve istendiğinde erişilip ön planlanda sunulmaları sağlanır. Özellikle sayfalardan oluşacak formlar için kullanılır.

Panel p = new Panel();
CardLayout cl = new CardLayout();
c.add( new Panel(), "Panel" );
c.add( new TextArea(), "Metin" );
p.setLayout( c );

GridLayout
Taşıyıcı bileşeni eşit ölceklerden oluşan ızgara dönüştürür. Eklenen bileşenleri sırayla bu hücrelere yerleştirir.

Panel p = new Panel();
p.setLayout( new GridLayout( 3, 2 ));
p.add( new Button("Tamam") );
p.add( new Button("Vazgeç") );

BoxLayout
Verilen bileşenleri, seçiminize göre, yatay ya da dikey sıralar.

Panel p = new Panel();
p.setLayout( new BoxLayout( p, BoxLayout.X_AXIS ));
p.add( new Button("Tamam") );
p.add( new Button("Vazgeç") );

Diğerleri
Haftaya daha karmaşık fakat görsel olarak daha esnek yerleşim yöneticileri : GridBagLayout, SpringLayout, FormLayout ve diğerleri...

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.