4 Nisan 2013

Customized JList | Özelleştirilmiş JList


JListi özelleştirebilmek için ListCellRenderer interface'inden yararlanırız. JList hücrelerini istediğimiz gibi özelleştirebileceğimiz bir sınıf düşünelim. Bu sınıfa ListCellRenderer interface'ini implements ettiğimiz zaman @Override metod oluşturur. Bu metod sayesinde özelleştirmiş olduğumuz sınıfı JListe göstererek JList hücrelerini özelleştirmiş oluruz.



Özelleştirmeyi anlaşılması rahat olması için hücreleri JLabel yapacağız.


import java.awt.*;
import javax.swing.*;

public class LabelListCellRenderer implements ListCellRenderer {

   @Override
   public Component getListCellRendererComponent(JList list, Object value,
  int index, boolean isSelected, boolean cellHasFocus) {
  
      JLabel label = new JLabel((String) value);

      if (isSelected) {
         // seçili JLabel mavi renkli olacak
         label.setForeground(Color.blue);
         label.setBackground(Color.blue);
      } else {
         // seçili değil ise yeşil renkli olacak
         label.setForeground(Color.green);
         label.setBackground(Color.GREEN);
      }

      return label;
   }
} 

JListi özelleştireceğimiz sınıfı oluşturduk sıra geldi bu sınıfı nasıl kullanacağımıza;
   list.setCellRenderer(new LabelListCellRenderer()); 

Şeklinde JList'e özelleştirmiş olduğumuz sınıfı tanıyoruz.

Örneği İndir

4 yorum:

  1. veri 2 ye tıklandığında mavi oluyor, veri 3 e tıklandığında veri 2 yeşile geri dönüyor ben mavide kalmasını istiyorum bunu nasıl çözeriz?

    YanıtlaSil
    Yanıtlar
    1. Merhaba Çağrı;

      veri 2'ye tıkladığınızda mavi oluyor, veri 2 seçilmiş oluyor. veri 3'e tıkladığınızda ise veri 3 seçilmiş olup, veri 2 seçilmiş olmaktan çıkıyor. Birden fazla seçim istediğin gibi yapabilmek için, JList ayarlarından "setSelectionMode" ile birden fazla seçilebilir hale getirmelisin. Aşağıdaki linkten inceleyebilirsin. Kolay gelsin.

      http://docs.oracle.com/javase/tutorial/uiswing/components/list.html#selection

      Sil
    2. Sorum tam olarak bu değildi single selection ya da multiple selection ayarını biliyorum benim aradığım şey mesela bunu bir gmail gibi düşünün item 2 ye gelip tıklayınca bold halinden normal fonta döndürmek gibi düşünün aradığım şey tam da bu ama veriyi tutmuyor render olayı geçici olarak style ya da label değiştiriyor

      Sil
    3. if blogları içerisinde seçili olup olmadığını kontrol ediyorsunuz. İstediğinizi yapmak size kalmış. Seçi ise bold olsun, italik olsun, kırmızı olsun, yeşil olsun gibi istediğiniz herşeyi yapabilirsiniz. Burda Hücreleri JLabel olarak atadım, anlattım. Farklı bir şekilde de kullanabilirsin. Burda render olayı tutuluyor. Ki tutulmamış olsa varsayılan değeri olan siyah rengi alırdı. Konuda seçili olup olmadığına göre kurgulanmış yapı var. seçili olanın rengi mavi, seçili olmayanın rengi yeşil olsun demişiz. Sizde seçili olanın fontu bold seçili olmayanın fontu normal olsun diyebilirsiniz.

      Yanlış anlamadım umarım :)

      Sil