2010-12-16 4 views
5

DB 용 데이터를 가져와 테이블에 표시하고 있습니다.JTable 셀 렌더링

내는 getColumnClass 내가 값을 인쇄 할 때

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

, 나는을 java.sql.Timestamp으로 클래스 이름을 얻을 수 있지만, 내가 문제가있어 표시 할 때, 그냥 표시입니다 DD/MM/yyyy,하지만 dd/MM/yyyy HH를 표시하려면 : mm, 어떻게 이것을 할 수 있습니까? 더 좋은 방법을가

외에이 일에서, 나는 다음 행

+0

문제점을 잘못 이해하고 있지만 실례지만 http://download.oracle.com/javase/tutorial/uiswing/components/table.html을 읽으십시오 - 테이블 셀에 대한 사용자 정의 렌더러를 설정할 수 있습니다 (표시 용 다른 날짜 형식) 및 사용자 정의 편집기 (행이 "사용 불가능"하지 않은 경우). – nokul

답변

1

나는 해결책을 찾았을 해제 datatime 오늘보다 더 적은 있는지 확인해야하고, 여기가

@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(); 
     } 

입니다 해?

3

나는 이것이 매우 오래된 문제라는 것을 알고 있지만, 나는 매우 비슷한 문제를 안고 있으며 문제에 대한 더 나은 해결책을 게시하기로 결정했다. 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)); 
    } 
} 

그리고 당신의 GUI 클래스, 클래스에이 정의를 추가 :

먼저, 새로운 클래스 정의한다이 경우

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

을, 나는 결정 첫 번째 열의 서식을 지정하지만 테이블 모델에서 상수를 정의하는 것은 매우 좋은 습관입니다.

가장 중요한 부분은 타임 스탬프 데이터 형식을 사용하는 다른 테이블과 코드를 다시 사용할 수 있다는 것입니다.

희망이 도움이됩니다.