Vaadin JFlexTable

Batuhan Düzgün tarafından yayınlanmıştır 28. October 2012 22:58

Merhaba arkadaşlar bu yazıda Vaadin Table kullanımını farklı bir bakış açısıyla inceleyeceğiz. Salt okunur veri barındıran Table bileşeni yerine esnek bir bileşen ortaya çıkarılacaktır. Vaadin Table bileşeni ile çok işlevsel ve akıllı bileşenler oluşturulabilir.

JFlexTable ?

JFlexTable proje ismi olarak verilmiştir. Vaadin kütüphanesi içinde bu isimde bir bileşen yoktur. Fakat, Table bileşenin  esnekliği nimetlerinden yararlanıp, yeni bir bileşen tanımlanmıştır. JFlexTable bünyesinde Vaadib görsel bileşenlerini veya ilkel veri tiplerini barındırabilir.  Böylece, Table üzerinde yeni kayıt, güncelleme ve silme gibi işlemler basit  ve sade bir şekilde yapılabilir. JFlexTable için aslında bir giriş yapılacaktır. Yazı dizisinin sonunda tam anlamıyla, akıllı ve modüler yapıya uygun bir bileşen ortaya çıkacaktır.

Yeni bir Vaadin projesi açılır. İlk adım olarak “Product” isminde bir sınıf yapısı hazırlanır. Bu sınıf içerisinde “ID” ve “Name” alanları bulunacaktır. “ID” alanı ürünün kimlik bilgisini, “Name” alanı ise ürünün ismini tutacaktır.

package com.jflextable;

public class Product {

                private long id;

                private String name;

               

                public long getId() {

                               return id;

                }

                public void setId(long id) {

                               this.id = id;

                }

                public String getName() {

                               return name;

                }

                public void setName(String name) {

                               this.name = name;

                }               

}

Daha sonrasında Vaadin uygulamasının başlatılacağı “init” metodu aşağıdaki gibi oluşturulacaktır.

private List<Product> products = null;

                private HierarchicalContainer hierarchicalContainer = null;

               

                // Vaadin web uygulamasının başlatıldığı metoddur.

                @Override

                public void init() {

                               Window mainWindow = new Window("Jflextable Application");

                               // Table sayfa içine yerleştirilir.

                               addJFlexTable(mainWindow);

                               setMainWindow(mainWindow);

                }

JFlexTable bileşenini sayfa üzerine ekleyecek metod aşağıdaki gibidir. Bu metod içinde Table bileşeni eklenecek ve bu Table bileşenine ait veri kaynağı oluşturulacaktır. Table veri kaynağı içinde TextField, ComboBox ve CheckBox bileşenleri yer alacaktır. Bu bileşenler ise kendi veri kaynaklarını içlerinde barındıracaktır.

// Table'a ait veri kaynağı oluşturulur.

                private HierarchicalContainer getTableDataSource() {

                               // Table'a ait sütunlar belirtilir. Aynı zamanda bu sütunlarda barındırılacak olan veri tipleri belirtilir.

                               HierarchicalContainer hierarchicalContainer = new HierarchicalContainer();

                               // Table bileşeni ilkel veri tipleri yanısıra, bileşen bazlı bir içerikte tutabilir.

                              

                               // Table'ın ilk sütunu "TextField" tipinde olacaktır.

                               hierarchicalContainer.addContainerProperty("productDescript", TextField.class, null);

                               // Table'ın ikinci sütunu "ComboBox" tipinde olacaktır.

                               hierarchicalContainer.addContainerProperty("productOptions", ComboBox.class, null);

                               // Table'ın üçüncü sütunu "CheckBox" tipinde olacaktır.

                               hierarchicalContainer.addContainerProperty("productSelect", CheckBox.class, null);

 

                               for (int i = 0; i < 20; i++) {

                                               // HierarchicalContainer üzerine yeni bir satır eklenir.

                                               Object itemId = hierarchicalContainer.addItem();

                                               TextField txtField = new TextField();

                                               // TextField tipinde bir bileşen yaratılır ve ilgili sütuna setlenir.

                                               hierarchicalContainer.getItem(itemId).getItemProperty("productDescript").setValue(txtField);

                                               ComboBox comboBox = new ComboBox();

                                               comboBox.setSizeFull();

                                               comboBox.setItemCaptionMode(NativeSelect.ITEM_CAPTION_MODE_ITEM);

                                               comboBox.setItemCaptionPropertyId("productName");

                                               comboBox.setImmediate(true);

                                               comboBox.setNullSelectionAllowed(false);

                                               comboBox.setContainerDataSource(getProductDataSource());

                                               // "ComboBox" tipinde bir bileşen yaratılır ve ilgili sütuna setlenir.

                                               hierarchicalContainer.getItem(itemId).getItemProperty("productOptions").setValue(comboBox);

                                               CheckBox chkBox = new CheckBox();

                                               // "CheckBox" tipinde bir bileşen yaratılır ve ilgili sütuna setlenir.

                                               hierarchicalContainer.getItem(itemId).getItemProperty("productSelect").setValue(chkBox);

                               }

                               return hierarchicalContainer;

                }

Table üzerinde yer alacak olan ComboBox bileşenlerinde kullanılacak veri kaynağını aşağıdaki metod sağlayacaktır. Bu metod ile ComboBox üzerinde gösterilecek veriler hazırlanmış olacaktır.

// ComboBox tipindeki bileşenler için veri kaynağı oluşturur.

                private HierarchicalContainer getProductDataSource() {

                               // Her satırda "ComboBox" bileşeni bulanacaktır.

                               // Bu ComboBox bileşenlerinin hepsi aynı veri kaynağını kullanacaktır.

                               // Bu nedenle veri kaynağı bir kere oluşturulur ve aynı veri kaynağı bütün ComboBox'lara verilir.

                               // Böylece hem performans hem de hafıza kazancı sağlanır.

                               if (hierarchicalContainer == null) {

                                               hierarchicalContainer = new HierarchicalContainer();

                                               hierarchicalContainer.addContainerProperty("productId", Long.class, null);

                                               hierarchicalContainer.addContainerProperty("productName", String.class, null);

                                              

                                               // Product listesi alınır ve HierarchicalContainer'a satırlar halinde eklenir.

                                               List<Product> list = getProductList();

                                               for (int i = 0; i < list.size(); i++) {

                                                               Product product = list.get(i);

                                                               Object itemId = hierarchicalContainer.addItem();

                                                               hierarchicalContainer.getItem(itemId).getItemProperty("productId").setValue(product.getId());

                                                               hierarchicalContainer.getItem(itemId).getItemProperty("productName").setValue(product.getName());

                                               }

                               }              

                               return hierarchicalContainer;

                }

ComboBox için demo verisi aşağıdaki şekilde hazırlanacaktır. Bu demo verisi liste halinde verilecektir.

// Demo verisi sağlar.

                private List<Product> getProductList() {

                               if(products == null) {

                                               products = new ArrayList<Product>();

                                               fillProducts(products);

                               }              

                               return products;

                }

               

                private void fillProducts(List<Product> products) {

                               Product product = new Product();

                               product.setId(1L);

                               product.setName("Bilgisayar");

                               products.add(product);

                              

                               product = new Product();

                               product.setId(2L);

                               product.setName("Çamaşır Makinesi");

                               products.add(product);

                              

                               product = new Product();

                               product.setId(3L);

                               product.setName("Bulaşık Makinesi");

                               products.add(product);

                              

                               product = new Product();

                               product.setId(4L);

                               product.setName("Televizyon");

                               products.add(product);

                }

JFlexTable projesi ilk adım olarak şimdilik bu noktada kalması yeterlidir. İlerleyen safhalarda deklaratif modele uygun bir bileşen haline getirilecektir.

Proje çalıştırılır ve sonuçlar aşağıdaki gibidir.

 

 

Umarım yararlı bir yazı olmuştur. Bir sonraki makalemde görüşmek dileğiyle …

Batuhan Düzgün

Bilgisayar Mühendisi

Endüstri Mühendisi 

Currently rated 4.0 by 2 people

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

Vaadin

Comments

Add comment


(Will show your Gravatar icon)  

  Country flag

biuquote
  • Comment
  • Preview
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.

Batuhan Düzgün

Sakarya Üniversitesi 

Bilgisayar Mühendisi

Endüstri Mühendisi

Yeditepe Üniversitesi

Bilgisayar Mühendisliği Yüksek Lisans 

 sahibinden.com

   Kıdemli Uzman Yazılım Mühendisi  

E-Mail 

   batuhan.duzgun@sahibinden.com

   batuhan.duzgun@windowslive.com

  github.com/batux

 

Sayfalar

Calendar

<<  September 2018  >>
MoTuWeThFrSaSu
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

Yazıları geniş takvimde göster