2010-11-19 19 views
1

Bir tabloyu satır öğeyi kullanarak sıralamaya çalışıyorum.JTable renderer sıralama ile

RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); 
cTable.setRowSorter(sorter); 

DefaultTableCellRenderer'ı genişleten bir oluşturucu kullanıyorum. Oluşturucuyu, hücrenin içeriğini, değerine göre bazı renkte boyamak için kullanıyorum.

cTable.setDefaultRenderer(Object.class,new <renderer name>()); 

örn:

public Component getTableCellRendererComponent(JTable table, Object v, 
      boolean isSelected, boolean hasFocus, int row, int column) 
    { 

     super.getTableCellRendererComponent(table, v, isSelected, hasFocus, 
        row, column); 
int k=table.getValueAt(row,column); 
    if (k >= 0)        this.setForeground(Color.red); 
} 

Not: Bu sadece bir örnek code.No gerçek işlevdir. Sıralamadığımda, sıralama mükemmel bir şekilde gerçekleşir ancak renk değiştirmenin render işlevselliği gerçekleşmez. Bu konu daha önce karşılaştığı herkes Has Sen için Oluşturucu mantığı uzatmak gerekir

cevap

4

yardımcı olun:?

if (isSelected) { 
    this.setForeground(table.getSelectionForeground()); 
} else if (k >= 0) { 
    this.setForeground(Color.red); 
} else { 
    this.setForeground(table.getForegroundColor()); 
} 

Ayrıca her durumuna bağlı olarak arka plan rengini ayarlamak isteyebilirsiniz. Bunun nedeni, DefaultTableCellRenderer'un her bir hücreye sırayla uygulanan bir "lastik damga" gibi davranmasıdır. Örneğin, 5. satırdaki hücre 1, k> = 0 değerine sahipse, bu hücre ve sonraki tüm hücreler için önalan rengini kırmızı olarak değiştiriyorsunuz. Bu nedenle, çekiniz başarısız olursa 'un değerini "normal" önalan rengine geri döndürmesi önemlidir.