2010-12-16 18 views
5

DB için veri alıyorum ve bir tabloda görüntüleniyor.JTablo hücre oluşturma

Benim getColumnClass ben değerini yazdırırken

@Override 
public Class<? extends Object> getColumnClass(int column) { 
    return getValueAt(0, column).getClass(); 
} 

, ben java.sql.Timestamp olarak sınıf adını almak, ama bu bir sorun var değilim görüntülediğinizde, sadece göstermek olduğunu gg/AA/yyyy, ama dd/MM/yyyy HH: mm değerini görüntülemek için ona ihtiyacım var, bunu nasıl başarabilirim? Daha iyi bir yol var mı

Bunun dışında yapmaktan, o zaman satır

+0

Sorununuzu yanlış anladıysam özür dilerim, ancak http://download.oracle.com/javase/tutorial/uiswing/components/table.html adresini okumalısınız. Tablo hücreleriniz için özel oluşturucuları ayarlayabilirsiniz (görüntüleme için başka bir tarih biçimi) ve özel düzenleyiciler (satırınız "devre dışı" değilse). – nokul

cevap

1

ben bir çözüm buldum devre dışı DataTime bugünden daha az olup olmadığını kontrol etmek gerekir ve burada

@Override 
     public Class<? extends Object> getColumnClass(int column) { 
      String value = getValueAt(0, column).getClass().toString(); 

      if (value.equalsIgnoreCase("class java.sql.Timestamp")) { 
       return JTextField.class; 
      } 

      return getValueAt(0, column).getClass(); 
     } 

olduğunu yap?

3

Bunun çok eski bir soru olduğunu biliyorum, ama çok benzer bir problem yaşıyordum ve problem için daha iyi bir çözüm sunmaya karar verdim. TimestampCellRenderer.java

package gui; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import javax.swing.table.DefaultTableCellRenderer; 

public class TimestampCellRenderer extends DefaultTableCellRenderer { 

    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

    public TimestampCellRenderer() { 
     super(); 
    } 

    public void setValue(Object value) { 
     if (formatter == null) { 
      formatter = DateFormat.getDateInstance(); 
     } 
     setText((value == null) ? "" : formatter.format(value)); 
    } 
} 

Ve sonra GUI sınıfında, sınıf için bu tanımı ekleyin::

İlk olarak, yeni bir sınıf tanımlamak gerekir Bu durumda

yourTable.getColumnModel().getColumn(1).setCellRenderer(new TimestampCellRenderer()); 

karar verdim İlk sütunu biçimlendirmek için, ancak masa modelinizde bir sabit tanımlamak çok iyi bir uygulama olacaktır.

Bunun en iyi yanı, kodunuzu, Zaman Damgası veri türünü kullanan diğer tablolarla yeniden kullanabilmenizdir.

Bu yardımcı olur umarız!